Như đã đề cập, MySQL không được xây dựng để tự xoay và bạn có thể nên xoay trong mã nếu có thể, nhưng cấm điều đó, dưới đây là một số ví dụ SQL sẽ làm những gì bạn muốn. Giả sử bảng thực tế của bạn có thể thay đổi theo một nghĩa nào đó (chẳng hạn như bạn có bao nhiêu cột q [x] hoặc bạn có bao nhiêu super_id), bạn có thể kết thúc điều này trong một thủ tục được lưu trữ để tự động tạo và thực thi SQL cần thiết.
Giả sử một bảng ban đầu có tên 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)
Sử dụng SQL sau:
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
;
Để đạt được kết quả này:
+----+------------+------------+
| q | super_id_1 | super_id_2 |
+----+------------+------------+
| qa | 3.3333 | 4.0000 |
| qb | 4.6667 | 3.0000 |
+----+------------+------------+
2 rows in set (0.00 sec)
(sửa:định dạng)