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

Jak zautomatyzować zapytania tabel przestawnych w MySQL

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja MySQL CEILING() — zaokrąglanie w górę do najbliższej liczby całkowitej

  2. Błąd krytyczny:wywołanie funkcji członkowskiej bind_param() na wartości logicznej

  3. Tabela jest określana dwukrotnie, zarówno jako cel dla 'UPDATE', jak i jako oddzielne źródło danych w mysql

  4. Jak zoptymalizować wydajność COUNT(*) w InnoDB za pomocą index

  5. Jak podzielić dane wyjściowe z mysqldump na mniejsze pliki?