Trong bài viết này, Comdy sẽ giúp thích chi tiết về câu lệnh group by rollup trong SQL server đi kèm với những ví dụ minh chứng cụ thể. Cùng theo dõi bài viết để rõ hơn về mệnh đề này nhé.
Giới thiệu về rollup trong SQL Server
Rollup là gì? ROLLUP
trong SQL Server là một mệnh đề con của mệnh đề GROUP BY cung cấp cách viết tắt để xác định nhiều GROUPING SETS. Không giống như CUBE – tạo các tập nhóm với tất cả các kết hợp của các cột. ROLLUP không tạo tất cả các tập hợp nhóm có thể dựa trên các cột thứ nguyên.
Khi tạo các tập hợp nhóm, sql rollup giả định một hệ thống phân cấp giữa các cột thứ nguyên và chỉ tạo các tập hợp nhóm dựa trên hệ thống phân cấp này.
ROLLUP thường được sử dụng để tạo ra tổng số phụ (subtotals) và tổng số (totals) cho mục đích báo cáo.
Hãy xem xét ví dụ sau đây: mệnh đề CUBE (d1,d2,d3)
sẽ xác định tám tập hợp nhóm như sau:
(d1, d2, d3)
(d1, d2)
(d2, d3)
(d1, d3)
(d1)
(d2)
(d3)
()
Nhưng mệnh đề sql rollup(d1,d2,d3)
chỉ tạo ra bốn tập hợp nhóm (giả sử phân cấp d1 > d2 > d3
) như sau:
(d1, d2, d3)
(d1, d2)
(d1)
()
Mệnh đề ROLLUP
thường được sử dụng để tính toán tổng hợp của dữ liệu phân cấp như bán hàng theo năm > quý > tháng.
Cú pháp của rollup trong SQL Server
How to use rollup in sql server? Để sử dụng roll up in sqlm, chúng ta sẽ sử dụng cú pháp chung của rollup SQL Server như sau:
SELECT
d1,
d2,
d3,
aggregate_function(c4)
FROM
table_name
GROUP BY
ROLLUP (d1, d2, d3);
Trong cú pháp này, d1, d2 và d3 là các cột thứ nguyên. Câu lệnh sẽ tính tổng các giá trị trong cột c4 dựa trên thứ bậc d1> d2> d3.
Bạn cũng có thể ROLLUP một phần để giảm tổng số phụ (subtotals) được tạo bằng cách sử dụng cú pháp sau:
SELECT
d1,
d2,
d3,
aggregate_function(c4)
FROM
table_name
GROUP BY
d1,
ROLLUP (d2, d3);
Ví dụ về rollup trong SQL Server
Chúng ta sẽ sử dụng lại bảng sales.sales_summary
trong cơ sở dữ liệu mẫu BikeStores đã tạo trong phần hướng dẫn về GROUPING SETS để minh họa. Nếu bạn chưa tạo bảng sales.sales_summary
, bạn có thể sử dụng câu lệnh sau để tạo bảng.
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;
Truy vấn sau đây sử dụng ROLLUP
để tính toán số tiền bán hàng theo thương hiệu (tổng số phụ – subtotals) và cả thương hiệu và danh mục (tổng số – totals).
SELECT
brand,
category,
SUM (sales) sales
FROM
sales.sales_summary
GROUP BY
ROLLUP(brand, category);
Trong ví dụ này, truy vấn giả định rằng có một hệ thống phân cấp giữa thương hiệu và danh mục, đó là thương hiệu > danh mục.
Lưu ý rằng nếu bạn thay đổi thứ tự của thương hiệu và danh mục, kết quả sẽ khác như được hiển thị trong truy vấn sau:
SELECT
category,
brand,
SUM (sales) sales
FROM
sales.sales_summary
GROUP BY
ROLLUP (category, brand);
Câu lệnh sau cho biết cách thực hiện ROLLUP một phần:
SELECT
brand,
category,
SUM (sales) sales
FROM
sales.sales_summary
GROUP BY
brand,
ROLLUP (category);
Câu lệnh with rollup SQL server được dùng để làm gì?
SELECT Category, Product, SUM(Quantity) AS TotalQuantity
FROM Orders
GROUP BY Category, Product WITH ROLLUP;
Grouping sets trong SQL là gì?
Grouping được dùng để phân biệt các giá trị NULL được trả về bởi rollup in sql, cube hay là grouping sets với các giá trị NULL tiêu chuẩn. Giá trị NULL được trả về dựa vào hoạt động của rollup, cube hay là grouping sets chính là một cách sử dụng đặc biệt của NULL. Điều này hoạt động giống như một trình giữ cột trong tập kết quả và có ý nghĩa là tất cả.
Group by SQL là gì?
Group by trong sql hay group by trong mysql là một cụm từ sử dụng trong câu lệnh SELECT để nhóm các hàng dữ liệu dựa trên giá trị của một hoặc nhiều cột và áp dụng các phép tổng hợp lên các nhóm này. GROUP BY thường được sử dụng kết hợp với các phép tổng hợp như SUM, AVG, COUNT, MAX, MIN, v.v.
Cú pháp:
SELECT column1, column2, …, aggregate_function(column)
FROM table
GROUP BY column1, column2, …;
Kết lại
Trên đây là toàn bộ chia sẻ của Comdy để giúp bạn hiểu sâu hơn về rollup trong sql server. Hi vọng thông tin trong bài viết này là bổ ích và ý nghĩa đối với mọi người. Xin cám ơn vì đã theo dõi, ủng hộ bài viết.