Tabele przestawne ułatwiają analizowanie danych i uzyskiwanie przydatnych trendów. Jednak może być konieczne zautomatyzowanie zapytań w tabelach przestawnych, aby często z nich korzystać. Ponieważ MySQL nie ma funkcji tworzenia tabel przestawnych, musisz napisać zapytanie SQL, aby zautomatyzować tabele przestawne w MySQL. Spójrzmy więc, jak zautomatyzować zapytania do tabeli przestawnej w MySQL
Jak zautomatyzować zapytania tabel przestawnych w MySQL
Oto kroki, aby zautomatyzować zapytania tabel przestawnych w MySQL. Załóżmy, że masz poniższą tabelę
CREATE TABLE Meeting ( ID INT, Meeting_id INT, field_key VARCHAR(100), field_value VARCHAR(100) ); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (1, 1,'first_name' , 'Alec'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (2, 1,'last_name' , 'Jones'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (3, 1,'occupation' , 'engineer'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (4,2,'first_name' , 'John'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (5,2,'last_name' , 'Doe'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (6,2,'occupation' , 'engineer'); +------+------------+------------+-------------+ | ID | Meeting_id | field_key | field_value | +------+------------+------------+-------------+ | 1 | 1 | first_name | Alec | | 2 | 1 | last_name | Jones | | 3 | 1 | occupation | engineer | | 4 | 2 | first_name | John | | 5 | 2 | last_name | Doe | | 6 | 2 | occupation | engineer | +------+------------+------------+-------------+
Załóżmy, że chcesz obrócić tabelę według egzaminu kolumnę, aby utworzyć 1 wiersz dla każdego identyfikatora spotkania i 1 kolumnę dla każdego klucza pola, jak pokazano poniżej.
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Automatyzacja zapytań do tabeli przestawnej
Jeśli znasz już liczbę kolumn do utworzenia, możesz utworzyć zapytania tabeli przestawnej za pomocą instrukcji CASE, aby utworzyć tabelę przestawną.
Jednak wiele razy nie znasz kolumn, które musisz utworzyć w tabelach przestawnych. W takich przypadkach możesz dynamicznie tworzyć tabele przestawne za pomocą następującego zapytania.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when exam = ''', exam, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting; SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting GROUP BY Meeting_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
W powyższych instrukcjach GROUP_CONCAT umożliwia łączenie wartości field_key z wielu wierszy w jeden ciąg. W powyższym zapytaniu używamy GROUP_CONCAT do dynamicznego tworzenia instrukcji CASE na podstawie unikalnych wartości w kolumnie field_key i przechowywania w zmiennej @sql, która jest następnie używana do tworzenia naszego zapytania wybierającego. Pomaga więc zautomatyzować zapytania do tabel przestawnych w MySQL
+------------+------------+-----------+------------+ | Meeting_id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
Teraz, gdy już wiesz, jak zautomatyzować zapytania do tabel przestawnych w MySQL, możesz dostosować je do swoich wymagań, dodając klauzulę WHERE lub JOINS.
Jeśli chcesz przestawiać tylko wybrane wartości wierszy jako kolumny, możesz dodać klauzulę WHERE w swojej pierwszej instrukcji select GROUP_CONCAT.
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting WHERE <condition>;
Jeśli chcesz filtrować wiersze w końcowej tabeli przestawnej, możesz dodać klauzulę WHERE w instrukcji SET.
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id');
Podobnie możesz również zastosować JOINS w zapytaniu SQL podczas dynamicznej transpozycji wierszy do kolumn w MySQL.
Możesz zautomatyzować zapytania w tabelach przestawnych za pomocą narzędzia do raportowania. Oto przykład automatycznej tabeli przestawnej 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, dashboardy i raporty z bazy danych MySQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.