Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Pivot Table Head Scratcher

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)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lấy dữ liệu từ MYSQL sang JSON bằng PHP

  2. Xóa hàng MySQL sau 30 phút bằng cách sử dụng Cron Jobs / Event Scheduler

  3. Chọn tin nhắn mới nhất giữa giao tiếp của hai người dùng trong mysql

  4. Lỗi 1130 trong mysql

  5. Tìm giá trị cụ thể trong danh sách dấu phẩy trong cơ sở dữ liệu