×

Tính tổng hợp theo chiều với CUBE trong MySQL

Trong nhiều bài toán phân tích dữ liệu phức tạp, việc thực hiện tổng hợp theo nhiều chiều là điều rất quan trọng. Một trong những công cụ hữu hiệu để làm điều này trong MySQL là sử dụng từ khóa CUBE. Bài viết này sẽ hướng dẫn bạn cách sử dụng khả năng này để tổng hợp dữ liệu một cách hiệu quả, thông qua một ví dụ cụ thể.

Khái niệm cơ bản về tổng hợp và CUBE

Dữ liệu tổng hợp thường được dùng để tính toán các phép thống kê như trung bình, tổng, hoặc số đếm của một tập hợp con dữ liệu. Chúng ta thường thực hiện tổng hợp này dựa trên một hoặc nhiều chiều (dimensions), ví dụ như tổng doanh thu theo tháng và năm.

Lệnh GROUP BY là công cụ chính để thực hiện các phép tổng hợp trong SQL. Tuy vậy, khi cần tổng hợp theo nhiều chiều, việc sử dụng GROUP BY truyền thống có thể dẫn đến nhiều truy vấn và làm tăng độ phức tạp của mã.

Đây là lúc từ khóa CUBE phát huy tác dụng. Với CUBE, MySQL cho phép bạn tổng hợp dữ liệu dựa trên tất cả các tổ hợp có thể của các cột trong câu lệnh GROUP BY, bao gồm cả tổ hợp có giá trị NULL (tổng hợp toàn bộ).

Ví dụ minh họa

Giả sử chúng ta có bảng doanh số bán hàng với cấu trúc và dữ liệu như sau:

CREATE TABLE sales (
    year INT,
    month INT,
    region VARCHAR(50),
    amount DECIMAL(10, 2)
);

INSERT INTO sales (year, month, region, amount) VALUES
(2023, 1, 'North', 1000.50),
(2023, 1, 'South', 1500.75),
(2023, 2, 'North', 1100.20),
(2023, 2, 'South', 1600.85),
(2023, 3, 'North', 1200.60),
(2023, 3, 'South', 1700.95);

Chúng ta muốn tính tổng doanh thu theo năm, tháng và khu vực, bao gồm cả tổ hợp con của các giá trị này để hiểu sâu hơn về dữ liệu.

Thực hiện tổng hợp với CUBE

Để giải quyết bài toán này, bạn có thể sử dụng lệnh GROUP BY kết hợp với ROLLUP trong MySQL:

SELECT 
    year,
    month,
    region,
    SUM(amount) AS total_amount
FROM 
    sales
GROUP BY 
    year, month, region WITH ROLLUP;

Kết quả thu được sẽ như sau:

year month region total_amount
2023 1 North 1000.50
2023 1 South 1500.75
2023 1 NULL 2501.25
2023 2 North 1100.20
2023 2 South 1600.85
2023 2 NULL 2701.05
2023 3 North 1200.60
2023 3 South 1700.95
2023 3 NULL 2901.55
2023 NULL NULL 8103.85
  • Tổng hợp tất cả các tháng và khu vực NULL cho từng năm.
  • Tổng hợp toàn bộ doanh thu theo năm.

Kết luận

Việc thực hiện tổng hợp theo chiều với CUBE trong MySQL giúp bạn vừa tiết kiệm được công sức, vừa giảm độ phức tạp của truy vấn. Điều này đem lại hiệu quả cao trong phân tích dữ liệu và giúp bạn có cái nhìn toàn diện về cách mà các yếu tố khác nhau ảnh hưởng đến dữ liệu của bạn. Hãy thử áp dụng CUBE vào các bài toán thực tế của bạn để thấy rõ sự hữu ích của nó.

Comments