CUBE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng CUBE trong SQL Server để tạo nhiều tập nhóm.

Giới thiệu về CUBE trong SQL Server

GROUPING SETS định nghĩa các nhóm dữ liệu trong một truy vấn. Ví dụ: truy vấn sau định nghĩa một tập nhóm duy nhất được ký hiệu là (brand):

SELECT 
    brand, 
    SUM(sales)
FROM 
    sales.sales_summary
GROUP BY 
    brand;

Nếu bạn chưa làm theo hướng dẫn GROUPING SETS, bạn có thể tạo bảng sales.sales_summary bằng cách sử dụng truy vấn sau:

SELECT
    b.brand_name AS brand,
    c.category_name AS category,
    p.model_year,
    round(
        SUM (
            quantity * i.list_price * (1 - discount)
        ),
        0
    ) sales 
INTO sales.sales_summary
FROM
    sales.order_items i
INNER JOIN production.products p ON p.product_id = i.product_id
INNER JOIN production.brands b ON b.brand_id = p.brand_id
INNER JOIN production.categories c ON c.category_id = p.category_id
GROUP BY
    b.brand_name,
    c.category_name,
    p.model_year
ORDER BY
    b.brand_name,
    c.category_name,
    p.model_year;

Ngay cả khi truy vấn sau không sử dụng mệnh đề GROUP BY, nó tạo ra một tập hợp nhóm trống được ký hiệu là ().

SELECT 
    SUM(sales)
FROM 
    sales.sales_summary;

CUBE là một mệnh đề con của mệnh đề GROUP BY cho phép bạn tạo nhiều nhóm. Sau đây minh họa cú pháp chung của CUBE:

SELECT
    d1,
    d2,
    d3,
    aggregate_function (c4)
FROM
    table_name
GROUP BY
    CUBE (d1, d2, d3);

Trong cú pháp này, hàm CUBE tạo tất cả các nhóm có thể dựa trên các cột d1, d2 và d3 mà bạn chỉ định trong mệnh đề CUBE.

Truy vấn trên trả về cùng một tập hợp kết quả như truy vấn sau, sử dụng hàm   GROUPING SETS:

SELECT
    d1,
    d2,
    d3,
    aggregate_function (c4)
FROM
    table_name
GROUP BY
    GROUPING SETS (
        (d1,d2,d3), 
        (d1,d2),
        (d1,d3),
        (d2,d3),
        (d1),
        (d2),
        (d3), 
        ()
     );

Nếu bạn có N cột được chỉ định trong CUBE, bạn sẽ có 2 N tập nhóm kết quả.

Có thể giảm số lượng  tập nhóm kết quả bằng cách sử dụng CUBE một phần như được hiển thị trong truy vấn sau:

SELECT
    d1,
    d2,
    d3,
    aggregate_function (c4)
FROM
    table_name
GROUP BY
    d1,
    CUBE (d2, d3);

Trong trường hợp này, truy vấn tạo ra bốn tập hợp nhóm vì chỉ có hai cột được chỉ định trong CUBE.

Ví dụ về CUBE trong SQL Server

Câu lệnh sau sử dụng CUBE để tạo bốn tập nhóm:

  1. (brand, category)
  2. (brand)
  3. (category)
  4. ()
SELECT
    brand,
    category,
    SUM (sales) sales
FROM
    sales.sales_summary
GROUP BY
    CUBE(brand, category);

Đây là kết quả đầu ra:

CUBE trong SQL Server

Trong ví dụ này, chúng tôi có hai cột được chỉ định trong mệnh đề CUBE, do đó chúng tôi có tổng cộng bốn tập hợp nhóm kết quả.

Ví dụ sau minh họa cách thực hiện CUBE một phần để giảm số lượng tập nhóm kết quả được tạo bởi truy vấn:

SELECT
    brand,
    category,
    SUM (sales) sales
FROM
    sales.sales_summary
GROUP BY
    brand,
    CUBE(category);

Hình ảnh sau đây cho thấy đầu ra:

CUBE trong SQL Server

Trong hướng dẫn này, bạn đã học cách sử dụng CUBE trong SQL Server để tạo nhiều tập nhóm.



Bài viết liên quan:

Trong hướng dẫn này, bạn sẽ học cách sử dụng GROUPING SETS trong SQL Server để tạo nhiều tập hợp nhóm.

Cách sử dụng mệnh đề HAVING trong SQL Server để lọc các nhóm dựa trên các điều kiện được chỉ định.

Tìm hiểu mọi thứ cần biết về trigger trong SQL Server giúp bạn sử dụng trigger hiệu quả nhất.