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

Skrobak do stołu obrotowego MySQL

Jak już wspomniano, MySQL nie jest zbudowany do samodzielnego przestawiania i prawdopodobnie powinieneś przestawiać w kodzie, jeśli to możliwe, ale poza tym, poniżej znajduje się przykład SQL, który powinien robić to, co chcesz. Zakładając, że twoja rzeczywista tabela jest w pewnym sensie zmienna (np. ile masz kolumn q[x] lub ile masz super_id), możesz to zapakować w procedurę składowaną, aby dynamicznie generować i wykonywać niezbędny kod SQL.

Zakładając początkową tabelę o nazwie 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)

Użyj następującego 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
;

Aby osiągnąć ten wynik:

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

(edycja:formatowanie)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać do każdego wiersza w MySQL?

  2. Klauzula IN zmiennej MYSQL

  3. Usuń wszystkie klucze obce w bazie danych (MySql)

  4. Dlaczego podana składnia jest poprawna w mysql?

  5. MySQL - aktualizowanie wszystkich rekordów w celu dopasowania maksymalnej wartości w grupie