Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Pivot Table Head Scratcher

Както вече споменахме, MySQL не е създаден да се върти сам и вероятно трябва да въртите кода, ако е възможно, но като изключим това, по-долу е примерен SQL, който трябва да прави това, което искате. Ако приемем, че действителната ви таблица е променлива в някакъв смисъл (като колко q[x] колони имате или колко super_id имате), можете да обвиете това в съхранена процедура за динамично генериране и изпълнение на необходимия SQL.

Ако приемем първоначална таблица с име 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)

Използвайте следния 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
;

За да постигнете този резултат:

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

(редактиране:форматиране)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извикайте съхранена процедура от оператора DECLARE, когато използвате курсори в MySQL

  2. върнете номера на оригиналния ред на mySQL

  3. Показване на ден или дата като колона в mysql

  4. Няма OQGraph в моя MariaDB?

  5. WorkbenchJ – Грешка:агрегатите не са разрешени в клаузата GROUP BY