Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да върна изхода на централната таблица в MySQL?

Това основно е въртяща се таблица.

Хубав урок за това как да постигнете това можете да намерите тук:http:// www.artfulsoftware.com/infotree/qrytip.php?id=78

Съветвам ви да прочетете тази публикация и да адаптирате това решение към вашите нужди.

Актуализиране

След като връзката по-горе в момента вече не е налична, се чувствам длъжен да предоставя допълнителна информация за всички вас, които търсите отговори на mysql тук. Наистина имаше огромно количество информация и няма да поставя всичко оттам тук (още повече, тъй като просто не искам да копирам огромните им знания), но ще дам някои съвети как да се справя с pivot таблици по начина на sql като цяло с примера от peku, който зададе въпроса на първо място.

Може би връзката се върне скоро, ще я следя.

Начинът на електронни таблици...

Много хора просто използват инструмент като MSExcel, OpenOffice или други инструменти за електронни таблици за тази цел. Това е валидно решение, просто копирайте данните там и използвайте инструментите, които GUI предлага, за да разрешите това.

Но... това не беше въпросът и дори може да доведе до някои недостатъци, като например как да вкарате данните в електронната таблица, проблемно мащабиране и така нататък.

Начинът на SQL...

Като се има предвид, че масата му изглежда така:

CREATE TABLE `test_pivot` (
  `pid` bigint(20) NOT NULL AUTO_INCREMENT,
  `company_name` varchar(32) DEFAULT NULL,
  `action` varchar(16) DEFAULT NULL,
  `pagecount` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`pid`)
) ENGINE=MyISAM;

Сега погледнете желаната от него/нейната таблица:

company_name    EMAIL   PRINT 1 pages   PRINT 2 pages   PRINT 3 pages
-------------------------------------------------------------
CompanyA        0       0               1               3
CompanyB        1       1               2               0

Редовете (EMAIL , PRINT x pages ) приличат на условия. Основното групиране е по company_name .

За да настрои условията, това по-скоро вика за използване на CASE -изявление. За да групирате по нещо, използвайте ... GROUP BY .

Основният SQL, осигуряващ тази опорна точка, може да изглежда така:

SELECT  P.`company_name`,
    COUNT(
        CASE 
            WHEN P.`action`='EMAIL' 
            THEN 1 
            ELSE NULL 
        END
    ) AS 'EMAIL',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '1' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 1 pages',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '2' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 2 pages',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '3' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 3 pages'
FROM    test_pivot P
GROUP BY P.`company_name`;

Това трябва да осигури желания резултат много бързо. Основният недостатък на този подход е, че колкото повече редове искате във вашата основна таблица, толкова повече условия трябва да дефинирате във вашия SQL израз.

Това също може да се справи, следователно хората са склонни да използват подготвени изявления, процедури, броячи и други.

Някои допълнителни връзки по тази тема:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получа последния вмъкнат идентификатор на MySQL таблица в PHP?

  2. Клауза за MySQL UNION

  3. Как мога да импортирам база данни с MySQL от терминал?

  4. MySQL match() against() - подреждане по уместност и колона?

  5. Отпадане на уникално ограничение от MySQL таблица