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:
- (brand, category)
- (brand)
- (category)
- ()
SELECT
brand,
category,
SUM (sales) sales
FROM
sales.sales_summary
GROUP BY
CUBE(brand, category);
Đây là kết quả đầu ra:

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:

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.