Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę zwrócić dane wyjściowe tabeli przestawnej w MySQL?

To w zasadzie jest tabela przestawna.

Fajny samouczek, jak to osiągnąć, można znaleźć tutaj:http:// www.artfulsoftware.com/infotree/qrytip.php?id=78

Radzę przeczytać ten post i dostosować to rozwiązanie do swoich potrzeb.

Aktualizacja

Po tym, jak powyższy link nie jest już dostępny, czuję się zobowiązany do podania dodatkowych informacji dla wszystkich, którzy szukają tutaj odpowiedzi mysql pivot. Miał naprawdę ogromną ilość informacji i nie będę umieszczał wszystkiego stamtąd tutaj (tym bardziej, że po prostu nie chcę kopiować ich ogromnej wiedzy), ale dam kilka rad, jak radzić sobie z pivotem tabele w sposób sql ogólnie z przykładem od peku, który zadał pytanie w pierwszej kolejności.

Może link wkrótce wróci, będę go mieć na oku.

Sposób arkusza kalkulacyjnego...

Wiele osób po prostu używa do tego celu narzędzia takiego jak MSExcel, OpenOffice lub innych narzędzi do arkuszy kalkulacyjnych. To jest prawidłowe rozwiązanie, po prostu skopiuj tam dane i użyj narzędzi oferowanych przez GUI, aby rozwiązać ten problem.

Ale... to nie było pytanie, a to może nawet prowadzić do pewnych wad, takich jak sposób umieszczenia danych w arkuszu kalkulacyjnym, problematyczne skalowanie i tak dalej.

Sposób SQL...

Biorąc pod uwagę, że jego stół wygląda mniej więcej tak:

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;

Teraz zajrzyj do wybranego przez niego stołu:

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

Wiersze (EMAIL , PRINT x pages ) przypominają warunki. Główne grupowanie to company_name .

Aby ustalić warunki, to raczej krzyczy za używanie CASE -oświadczenie. Aby pogrupować według czegoś, użyj ... GROUP BY .

Podstawowy kod SQL dostarczający tę oś może wyglądać mniej więcej tak:

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`;

Powinno to bardzo szybko zapewnić pożądany rezultat. Główną wadą tego podejścia jest to, że im więcej wierszy chcesz umieścić w tabeli przestawnej, tym więcej warunków musisz zdefiniować w instrukcji SQL.

Z tym również można sobie poradzić, dlatego ludzie mają tendencję do używania przygotowanych instrukcji, procedur, liczników i tym podobnych.

Kilka dodatkowych linków na ten temat:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Parsowanie daty w MySQL

  2. Jak uzupełnić ciąg znakami wiodącymi/końcowymi w MySQL — LPAD(), RPAD()

  3. Jak obliczyć depozyt zabezpieczający w MySQL

  4. Jak zresetować AUTO_INCREMENT w MySQL?

  5. Instalowanie MySQL-python