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

Cách tạo bảng tổng hợp động trong MySQL

Bảng tổng hợp giúp dễ dàng phân tích khối lượng lớn dữ liệu bằng cách tổ chức thông tin thành một tập dữ liệu nhỏ hơn, có thể quản lý được. Tuy nhiên, không có chức năng tích hợp nào để đạt được pivot trong MySQL. Chúng ta cần viết một truy vấn SQL để chuyển đổi hàng thành cột trong MySQL, và sau đó tạo một báo cáo tổng hợp trong MySQL. Vì vậy, hãy xem cách tạo bảng tổng hợp động trong MySQL.

Cách tạo bảng tổng hợp động trong MySQL

Nếu bạn muốn tạo bảng tổng hợp trong MySQL, bạn thường sử dụng câu lệnh IF / CASE. Tuy nhiên, phương pháp này chỉ hoạt động khi bạn đã biết tất cả các cột bạn cần tạo trong bảng tổng hợp.

Làm cách nào để bạn tạo bảng tổng hợp động trong MySQL, khi bạn không biết các cột sẽ được tạo hoặc nếu bạn mong đợi chúng thay đổi theo thời gian? Trong những trường hợp như vậy, chúng tôi sử dụng GROUP_CONCAT chức năng.

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 tạo bảng tổng hợp động, sao cho một cột mới được tạo cho mỗi giá trị duy nhất trong field_key , đó là (first_name, last_name, nghề nghiệp)

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

Tạo bảng tổng hợp động trong MySQL

Nếu bạn đã biết những cột nào cần tạo trong bảng tổng hợp, bạn có thể sử dụng câu lệnh CASE để tạo bảng tổng hợp. Tuy nhiên, để tạo bảng tổng hợp động trong MySQL, chúng tôi sử dụng GROUP_CONCAT chức năng chuyển đổi động các hàng thành cột, như được hiển thị bên dưới.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' 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;

GROUP_CONCAT cho phép bạn nối các giá trị 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 field_key và lưu trữ chuỗi đó trong biến @sql. Sau đó, nó được sử dụng để tạo truy vấn chọn lọc của chúng tôi.

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

Bằng cách này, bạn có thể 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 truy vấn trên 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 chọn các giá trị hàng 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, như được hiển thị trong in đậm dưới đây

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 như được hiển thị trong in đậm bên dưới.

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 tạo bảng tổng hợp động trong MySQL.

Khi bạn tạo bảng tổng hợp động trong MySQL, bạn có thể sử dụng công cụ báo cáo để vẽ biểu đồ trong bảng. Dưới đây là một ví dụ về bảng tổng hợp đượ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 động trong Ubiq mà không cần viết bất kỳ SQL nào không?

Nhân tiện, nếu bạn muốn tạo bảng tổng hợp, biểu đồ và trang tổng quan 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. Cách kết nối nhiều cơ sở dữ liệu trong PHP, MYSQLi &PDO

  2. mysql kiểm tra xem các số có trong danh sách được phân tách bằng dấu phẩy không

  3. Làm cách nào để xóa khỏi vùng chọn trong MySQL?

  4. MySQL MariaDB - Truy vấn sử dụng bảng tạm thời

  5. Cách Chèn Nhiều Hàng trong MySQL