sql >> Database teknologi >  >> RDS >> Mysql

MySQL Pivot Table Head Scratcher

Som allerede nævnt er MySQL ikke bygget til at pivotere alene, og du bør nok pivotere i kode, hvis det er muligt, men bortset fra det, er nedenfor et eksempel på SQL, der skal gøre, hvad du vil. Forudsat at din faktiske tabel er variabel i en eller anden forstand (som hvor mange q[x] kolonner du har, eller hvor mange super_id'er du har), kan du pakke dette ind i en lagret procedure for dynamisk at generere og udføre den nødvendige SQL.

Forudsat en indledende tabel ved navn testTabel:

mysql> select * from testTable;
+----------+--------+------+------+
| super_id | cat_id | qa   | qb   |
+----------+--------+------+------+
|        1 |      1 |    5 |    5 | 
|        1 |      2 |    2 |    5 | 
|        1 |      3 |    3 |    4 | 
|        2 |      4 |    5 |    3 | 
|        2 |      5 |    3 |    4 | 
|        2 |      6 |    4 |    2 | 
+----------+--------+------+------+
6 rows in set (0.00 sec)
 

Brug følgende SQL:

SELECT
    'qa' q,
    SUM( CASE WHEN super_id = 1 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
    SUM( CASE WHEN super_id = 2 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
FROM
    testTable
UNION ALL
SELECT
    'qb' q,
    SUM( CASE WHEN super_id = 1 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
    SUM( CASE WHEN super_id = 2 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
FROM
    testTable
;
 

For at opnå dette resultat:

+----+------------+------------+ | q | super_id_1 | super_id_2 | +----+------------+------------+ | qa | 3.3333 | 4.0000 | | qb | 4.6667 | 3.0000 | +----+------------+------------+ 2 rows in set (0.00 sec)

(rediger:formatering)




  1. ALTER TABLE-sætningen var i konflikt med FOREIGN KEY-begrænsningen i SQL Server - SQL Server / TSQL Selvstudium, del 69

  2. Indsæt CLOB i Oracle-databasen

  3. Transformationelle historier på MariaDB OpenWorks-konferencen

  4. Indlæs Javascript-array med MYSQL-databasedata