sql >> Databasteknik >  >> RDS >> Mysql

Hur man automatiserar pivottabellsfrågor i MySQL

Pivottabeller gör det enkelt att analysera din data och få användbara trender. Du kan dock behöva automatisera pivottabellsfrågor för att kunna använda dem ofta. Eftersom MySQL inte har en funktion för att skapa pivottabeller måste du skriva SQL-fråga för att automatisera pivottabeller i MySQL. Så låt oss titta på hur man automatiserar pivottabellsfrågor i MySQL

Hur man automatiserar pivottabellsfrågor i MySQL

Här är stegen för att automatisera pivottabellsfrågor i MySQL. Låt oss säga att du har följande tabell

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    |
+------+------------+------------+-------------+

Låt oss säga att du vill pivotera tabellen genom examen kolumn för att skapa en rad för varje mötes-id och en kolumn för varje fältnyckel, som visas nedan.

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

Automatisera pivottabellsfrågor

Om du redan vet hur många kolumner som ska skapas kan du skapa pivottabellfrågor med CASE-satsen för att skapa en pivottabell.

Men många gånger vet du inte vilka kolumner du behöver skapa i pivottabeller. I sådana fall kan du skapa pivottabeller dynamiskt med hjälp av följande fråga.

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;

I ovanstående uttalanden låter GROUP_CONCAT dig sammanfoga field_key-värden från flera rader till en enda sträng. I ovanstående fråga använder vi GROUP_CONCAT för att dynamiskt skapa CASE-satser, baserat på de unika värdena i field_key-kolumnen och lagra i @sql-variabeln, som sedan används för att skapa vår urvalsfråga. Så det hjälper dig att automatisera pivottabellsfrågor i MySQL

+------------+------------+-----------+------------+
| Meeting_id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

Nu när du vet hur man automatiserar pivottabellsfrågor i MySQL kan du anpassa dem enligt dina krav genom att lägga till WHERE-klausul eller JOINS.

Om du bara vill pivotera valda radvärden som kolumner, kan du lägga till WHERE-satsen i din första select GROUP_CONCAT-sats.

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

Om du vill filtrera rader i din sista pivottabell kan du lägga till WHERE-satsen i din SET-sats.

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

På samma sätt kan du också använda JOINS i din SQL-fråga medan du överför rader till kolumner dynamiskt i MySQL.

Du kan automatisera pivottabellsfrågor med ett rapportverktyg. Här är ett exempel på en automatisk pivottabell skapad med Ubiq.

Visste du att du kan skapa pivottabeller i Ubiq genom att bara dra och släppa?

Om du vill skapa pivottabeller, diagram, instrumentpaneler och rapporter från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.

  1. Psql lista alla tabeller

  2. SQL VARCHAR Datatyp Göra och inte göra för snabbare databaser

  3. mysqldump bästa praxis:Del 1 – MySQL-förutsättningar

  4. Använda databasscheman i SQL Server