sql >> Database >  >> RDS >> Mysql

MySQL Draaitafel Head Scratcher

Zoals eerder vermeld, is MySQL niet gebouwd om op zichzelf te draaien en je zou indien mogelijk in code moeten draaien, maar behalve dat, hieronder is een voorbeeld van SQL die zou moeten doen wat je wilt. Ervan uitgaande dat uw werkelijke tabel in zekere zin variabel is (zoals hoeveel q[x] kolommen u heeft, of hoeveel super_id's u heeft), kunt u dit in een opgeslagen procedure opnemen om dynamisch de benodigde SQL te genereren en uit te voeren.

Uitgaande van een eerste tabel met de naam testTable:

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)

Gebruik de volgende 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
;

Om dit resultaat te bereiken:

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

(edit:opmaak)




  1. Tel het aantal dagen tussen 2 datums in JPA

  2. Veroorzaakt door:java.sql.SQLException:niet-ondersteunde tekencodering 'utf8mb4'

  3. Wat is ISO_year in sql-server

  4. Totale tijdsduur berekenen in MySQL