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

Cách tự động hóa truy vấn bảng Pivot trong MySQL

Pivot Tables giúp dễ dàng phân tích dữ liệu của bạn và nhận các xu hướng hữu ích. Tuy nhiên, bạn có thể cần phải tự động hóa các truy vấn bảng tổng hợp để sử dụng chúng thường xuyên. Vì MySQL không có chức năng tạo bảng tổng hợp, bạn cần viết truy vấn SQL để tự động hóa bảng tổng hợp trong MySQL. Vì vậy, hãy xem cách tự động hóa các truy vấn bảng tổng hợp trong MySQL

Cách tự động hóa các truy vấn Pivot Table trong MySQL

Dưới đây là các bước để tự động hóa các truy vấn bảng tổng hợp trong MySQL. Giả sử bạn có bảng sau

CREATE TABLE Meeting
(
    ID INT,
    Meeting_id INT,
    field_key VARCHAR(100),
    field_value VARCHAR(100)
);

INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (1, 1,'first_name' , 'Alec');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (2, 1,'last_name' , 'Jones');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (3, 1,'occupation' , 'engineer');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (4,2,'first_name' , 'John');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (5,2,'last_name' , 'Doe');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (6,2,'occupation' , 'engineer');

+------+------------+------------+-------------+
| ID   | Meeting_id | field_key  | field_value |
+------+------------+------------+-------------+
|    1 |          1 | first_name | Alec        |
|    2 |          1 | last_name  | Jones       |
|    3 |          1 | occupation | engineer    |
|    4 |          2 | first_name | John        |
|    5 |          2 | last_name  | Doe         |
|    6 |          2 | occupation | engineer    |
+------+------------+------------+-------------+

Giả sử bạn muốn xoay vòng bảng bằng bài kiểm tra để tạo 1 hàng cho mỗi meeting_id và 1 cột cho mỗi field_key, như được hiển thị bên dưới.

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

Tự động hóa truy vấn bảng tổng hợp

Nếu bạn đã biết số lượng cột sẽ được tạo, bạn có thể tạo truy vấn bảng tổng hợp bằng cách sử dụng câu lệnh CASE để tạo bảng tổng hợp.

Tuy nhiên, nhiều khi bạn không biết các cột bạn cần tạo trong bảng tổng hợp. Trong những trường hợp như vậy, bạn có thể tạo động các bảng tổng hợp bằng cách sử dụng truy vấn sau.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when exam = ''',
      exam,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting;
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting 
                   GROUP BY Meeting_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Trong các câu lệnh trên, GROUP_CONCAT cho phép bạn nối các giá trị field_key từ nhiều hàng thành một chuỗi duy nhất. Trong truy vấn trên, chúng tôi sử dụng GROUP_CONCAT để tạo động các câu lệnh CASE, dựa trên các giá trị duy nhất trong cột field_key và lưu trữ trong biến @sql, sau đó được sử dụng để tạo truy vấn chọn của chúng tôi. Vì vậy, nó giúp bạn tự động hóa các truy vấn bảng tổng hợp trong MySQL

+------------+------------+-----------+------------+
| Meeting_id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

Bây giờ bạn đã biết cách tự động hóa các truy vấn bảng tổng hợp trong MySQL, bạn có thể tùy chỉnh chúng theo yêu cầu của mình bằng cách thêm mệnh đề WHERE hoặc JOINS.

Nếu bạn chỉ muốn xoay vòng các giá trị hàng chọn dưới dạng cột, bạn có thể thêm mệnh đề WHERE trong câu lệnh GROUP_CONCAT lựa chọn đầu tiên của mình.

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

Nếu bạn muốn lọc các hàng trong bảng tổng hợp cuối cùng của mình, bạn có thể thêm mệnh đề WHERE trong câu lệnh SET của mình.

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

Tương tự, bạn cũng có thể áp dụng JOINS trong truy vấn SQL của mình trong khi chuyển đổi động các hàng thành cột trong MySQL.

Bạn có thể tự động hóa các truy vấn bảng tổng hợp bằng công cụ báo cáo. Dưới đây là một ví dụ về bảng tổng hợp tự động được tạo bằng Ubiq.

Bạn có biết rằng bạn có thể tạo bảng tổng hợp trong Ubiq chỉ bằng cách kéo và thả không?

Nếu bạn muốn tạo bảng tổng hợp, biểu đồ, trang tổng quan và báo cáo từ cơ sở dữ liệu MySQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.

  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àm cách nào để tăng tốc truy vấn MySQL với phần bù lớn trong mệnh đề LIMIT?

  2. Thiết kế ngược cơ sở dữ liệu MySQL bằng MySQL Workbench

  3. Mysql có thể tách một cột không?

  4. nhập CSV vào phpmyadmin

  5. onbeforeprint () và onafterprint () tương đương cho các trình duyệt không phải IE