Tabele przestawne są przydatne do analizy danych, umożliwiają wyświetlanie wartości wierszy jako kolumn w celu łatwego uzyskiwania informacji. Jednak nie ma funkcji tworzenia tabeli przestawnej w MySQL. Musisz więc napisać zapytanie SQL, aby utworzyć tabelę przestawną w MySQL. Na szczęście istnieje wiele sposobów tworzenia tabeli przestawnej w MySQL. Przyjrzyjmy się każdemu z nich szybko.
Jak utworzyć tabelę przestawną w MySQL
Oto kroki, aby utworzyć tabelę przestawną w MySQL. Załóżmy, że masz poniższą tabelę
CREATE TABLE egzaminy (id int(11) NOT NULL auto_increment,nazwa varchar(15),egzamin int,score int,PRIMARY KEY (id));wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Bob' ,1,70);wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Bob',2,77);wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Bob',3,71);wstaw do egzaminy (nazwisko,egzamin,wynik) wartości ('Bob',4,70);wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Sue',1,89);wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Sue',2,87);wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Sue',3,88);wstaw do egzaminów (nazwisko,egzamin,wynik) wartości ('Sue',4, 89);mysql> wybierz * z egzaminów;+------+------+------+-------+| identyfikator | nazwa | egzamin | wynik |+------+------+------+-------+| 1 | Bob | 1 | 70 || 2 | Bob | 2 | 77 || 3 | Bob | 3 | 71 || 4 | Bob | 4 | 70 || 5 | Pozwać | 1 | 89 || 6 | Pozwać | 2 | 87 || 7 | Pozwać | 3 | 88 || 8 | Pozwać | 4 | 89 |+------+------+------+-------+
Załóżmy, że chcesz obrócić tabelę według egzaminu kolumna, aby utworzyć 1 wiersz dla każdego ucznia i 1 kolumnę dla każdego egzaminu, jak pokazano poniżej.
+--------+---------------+-----------+-----------+- -----------+| nazwa | egzamin1 | egzamin2 | egzamin3 | egzamin4 |+-----------+-----------+-----------+-----------+-- ----------+| Bob | 70 | 77 | 71 | 70 || Pozew | 89 | 87 | 88 | 89 |+--------+-----------+-----------+-----------+-- ----------+
Możesz utworzyć tabelę przestawną w MySQL za pomocą instrukcji IF lub CASE.
Przeczytaj bonus: Jak obliczyć medianę w MySQL
Utwórz tabelę przestawną w MySQL za pomocą instrukcji IF
Oto zapytanie SQL transponujące wiersze do kolumn za pomocą instrukcji IF.
SELECT nazwa,suma(JEŻELI(egzamin=1, wynik, NULL)) AS egzamin1,suma(JEŻELI(egzamin=2, wynik, NULL)) AS egzamin2,sum(JEŻELI(egzamin=3, wynik, NULL) ) AS egzamin3,sum(IF(egzamin=4, wynik, NULL)) AS egzamin4FROM egzaminówGRUPA WG nazwy;+--------+-----------+----- ------+-----------+------------+| nazwa | egzamin1 | egzamin2 | egzamin3 | egzamin4 |+-----------+-----------+-----------+-----------+-- ----------+| Bob | 70 | 77 | 71 | 70 || Pozew | 89 | 87 | 88 | 89 |+--------+-----------+-----------+-----------+-- ----------+
W powyższym zapytaniu musisz pogrupować według imię kolumna, ponieważ chcesz 1 wiersz dla każdego ucznia. Musisz także podać 1 warunek dla każdej kolumny, którą chcesz utworzyć, czyli 1 warunek dla każdego egzaminu
Utwórz tabelę przestawną w MySQL za pomocą instrukcji CASE
Oto zapytanie SQL do konwersji wierszy na kolumny za pomocą instrukcji CASE.
Powyższe zapytanie działa podobnie do tego, które używa powyższego warunku IF. Musisz pogrupować według kolumny, według której chcesz przestawić dane, czyli nazwa . Ponadto musisz zdefiniować 1 wyrażenie CASE dla każdego numeru egzaminu, ponieważ chcesz utworzyć oddzielne kolumny dla każdego egzaminu.
Możesz także łączyć wyniki egzaminów w tabeli przestawnej. Na przykład, jeśli chcesz zsumować wyniki egzaminu1 i egzaminu2 i wyświetlić je w tej samej kolumnie, możesz użyć następującego zapytania.
WYBIERZ nazwę,suma(CASE WHEN egzamin=1 lub egzamin=2 TO wynik W INNYM PRZYPADKU KONIEC NULL) AS egzamin12,suma(W PRZYPADKU KIEDY egzamin=3 TO wynik JEŚLI KONIEC NULL) AS egzamin3,suma(W PRZYPADKU KIEDY egzamin=4 TO wynik JEŚLI KONIEC NULL) AS egzamin4Z egzaminówGRUPA WEDŁUG nazwy;+----- ---+-------------+-----------+-----------+--------- ---+| nazwa | egzamin12 | egzamin2 | egzamin3 | egzamin4 |+------------+-------------+-----------+-----------+- -----------+| Bob | 147 | 77 | 71 | 70 || Pozew | 176 | 87 | 88 | 89 |+--------+------------+-----------+-----------+- -----------+
W powyższej tabeli wyniki egzaminu 1 i egzaminu 2 zostały dodane i wyświetlone w pojedynczej kolumnie egzamin12, po prostu przez modyfikację warunku pierwszego wyrażenia CASE i usunięcie drugiego wyrażenia CASE.
Możesz dostosować powyższe zapytania zgodnie z wymaganiami, aby utworzyć tabelę przestawną w MySQL. Możesz także użyć narzędzia do raportowania, aby wykreślić wyniki w tabeli. Oto przykład tabeli utworzonej za pomocą Ubiq.
Czy wiesz, że możesz tworzyć tabele przestawne w Ubiq za pomocą przeciągania i upuszczania?
Jeśli chcesz tworzyć tabele przestawne, wykresy i dashboardy z bazy danych MySQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.