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.

SQL ServerGroup ByThao tác dữ liệu trong SQL Server
Bài Viết Liên Quan:
GUID trong SQL Server
Trung Nguyen 12/03/2022
GUID trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu về GUID trong SQL Server và cách sử dụng hàm NEWID() để tạo giá trị GUID.

Kiểu dữ liệu DATETIMEOFFSET trong SQL Server
Trung Nguyen 12/03/2022
Kiểu dữ liệu DATETIMEOFFSET trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATETIMEOFFSET trong SQL Server để thao tác datetime với múi giờ.

Kiểu dữ liệu TIME trong SQL Server
Trung Nguyen 12/03/2022
Kiểu dữ liệu TIME trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách lưu trữ thời gian trong ngày trong cơ sở dữ liệu bằng cách sử dụng kiểu dữ liệu TIME trong SQL Server.

Kiểu dữ liệu DATE trong SQL Server
Trung Nguyen 12/03/2022
Kiểu dữ liệu DATE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATE trong SQL Server để lưu trữ dữ liệu ngày tháng trong một bảng.