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

Jak utworzyć tabelę przestawną w MySQL

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.

WYBIERZ nazwa,suma(WSKAZÓWKA GDY egzamin=1 TO wynik ELSE NULL END) AS egzamin1,sum(CASE KIEDY egzamin=2 THEN wynik ELSE NULL END) AS egzamin2,sum(CASE KIEDY egzamin=3 TO wynik ELSE NULL END) ) AS egzamin3,suma(WSKAZÓWKA, KIEDY egzamin=4 TO wynik ELSE NULL END) AS egzamin4Z egzaminówGRUPA WG nazwy;+------------+-----------+----- ------+-----------+------------+| nazwa | egzamin1 | egzamin2 | egzamin3 | egzamin4 |+-----------+-----------+-----------+-----------+-- ----------+| Bob | 70    | 77    | 71 | 70     || Pozew  | 89    | 87    | 88    | 89    |+--------+-----------+-----------+-----------+-- ----------+

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie danych z bazy danych MySQL do listy rozwijanej html

  2. Co to jest MySQL:przegląd

  3. Dynamiczna tabela przestawna MySQL

  4. SQL:Tworzenie tabeli relacji z 2 różnymi auto_increment

  5. MySQL:Nieprawidłowe użycie funkcji grupy