“group by trong sql” là từ khóa đang được mọi người quan tâm và chú ý đến. Bên cạnh đó, giasuviet.edu.vn là kênh chuyên chia sẻ về bản tin của máy tính, công nghệ, cũng như chia sẻ các thủ thuật tiện ích hữu ích cho người dùng. Hôm nay , giasuviet.edu.vn sẽ giới thiệu đến các bạn bài viết Mệnh đề GROUP BY trong SQL
Câu lệnh sqlMệnh đề GROUP BY trong SQLTuyên bố CategorySQL
Mệnh đề GROUP BY trong SQL

Câu lệnh group by trong sql được sử dụng cùng với câu lệnh SELECT để sắp xếp dữ liệu thống nhất thành các nhóm, hàm này trong ngôn ngữ sql đứng sau mệnh đề WHERE trong câu lệnh SELECT và trước mệnh đề ORDER BY.SQL và các mệnh đề như GROUP BY đang đóng một vai trò quan trọng như nhau trong DBMS.Biết cách sử dụng GROUP BY khi sử dụng ngôn ngữ SQL là một điều cần thiết.
Không có câu lệnh thừa nào của một hàm cơ sở dữ liệu, chỉ là bạn không cần sử dụng chúng hoặc áp dụng chúng không đúng mục đích.Mệnh đề group by sql được thêm vào vì các hàm tổng hợp (như SUM) trả về một tập hợp các giá trị trong cột đó mỗi khi chúng được gọi, nhờ lệnh sql GROUP BY chúng ta có thể tính tổng các giá trị.giá trị cho mỗi nhóm lẻ trong cột.Cách làm nội dung như sau:
CHỌN tên_chỉ_mạch, SUM (tên_mạch) TỪ tên_bảng NHÓM THEO tên_mục |
Ví dụ, chúng tôi có bản ghi “HOCPHISINHVIEN” như sau:
TÔI | MƯỜI | tuổi tác | MONHOC | HOCPHI |
Đầu tiên | Hoàng | 21 | IT | 4 |
2 | Nhu | 22 | TCNH | 5 |
3 | Treo | 21 | CK | 3 |
4 | Hoàng | 21 | CK | 3 |
5 | Treo | 21 | IT | 4 |
6 | Ngân | 22 | TCNH | 5 |
Muốn biết tổng học phí của từng sinh viên, chúng ta phải sử dụng câu truy vấn sau:SQL> SELECT TEN, SUM (HOCPHI) FROM HOCPHISINHVIENGROUP BY TEN;Sau đó, nó sẽ tạo ra một bảng nội dung mới như sau:
MƯỜI | SUM (HOCPHI) |
Hoàng | 7 |
Nhu | 5 |
Treo | 7 |
Ngân | 5 |
Việc sử dụng mệnh đề nhìn chung khá đơn giản, chỉ cần bạn nắm rõ cú pháp, không cần biết thuộc lòng vẫn có thể sử dụng được, đây cũng có thể xem là một lợi thế của người tạo ra ngôn ngữ truy vấn.Truy vấn SQL.Một số hàm tổng hợp thường đi kèm với Group by khi lập trình SQL.
Theo công thức cấu trúc, group by trong máy chủ sql thường đi kèm với một số chức năng nhất định, cụ thể nhất là:
AVG: Hàm AVG trong SQL dùng để tìm giá trị trung bình của một trường gồm nhiều bản ghi khác nhau, khi được sử dụng với mệnh đề group by trong sql, hàm sẽ trả về giá trị trung bình của nhóm cột.COUNT: Hàm COUNT là hàm đơn giản nhất và rất hữu ích để đếm số lượng bản ghi được mong đợi được trả về bởi một câu lệnh SELECT.Khi được sử dụng, mệnh đề này sẽ trả về số lần xuất hiện trong một cột.MAX: Hàm MAX trong SQL được sử dụng để tìm giá trị lớn nhất trong một tập hợp các bản ghi, người dùng có thể tìm giá trị lớn nhất của tất cả các bản ghi được cung cấp bởi tên với mỗi mệnh đề nhóm.bởi máy chủ sqlMIN: Tương tự, hàm MIN trả về giá trị nhỏ nhất trong một nhóm cột khi được kết hợp với nhóm bằng SQL.Vậy nội dung của group by sql là gì thì chắc chắn sau bài viết này bí mật đã được bật mí, người dùng có thể tự mình tìm hiểu khi nào sử dụng group by sql, việc áp dụng ngôn ngữ máy tính sẽ trở nên dễ dàng hơn khi bạn thành thạo nó.
Ví dụ về nhóm theo câu lệnh cho lập trình sql
Một vài ví dụ vềcâu lệnh group by in sqlđể bạn đọc tham khảo.
Ví dụ 1:Nhóm theolệnhsqlServer
CHỌN cot1, cot2,… cot_N,
Ham_tong (cũi)
TỪ bang
NHÓM THEO cot1, cot2,… cot_N;
Ghi chú:
– Cot1, cot2,… cotN: là giá trị không có trong hàm tổng và phải nằm trong mệnh đề GROUP BY.
– Hàm_tong: có thể là các hàm như MIN, MAX, COUNT, SUM, AVG
– Bang: bảng để lấy bảng ghi và phải có ít nhất 1 bảng dưới FROM.chỉ dẫn
– WHERE dieukien: điều kiện so khớp thỏa mãn điều kiện WHERE.mệnh đề
Ví dụ 2:Nhómcú pháptheo sql Serversử dụng hàm SUM.Dưới đây là một ví dụ sử dụng hàm SUM để tính tổng để trả về số thiết bị và tổng số lượng theo số thiết bị.
CHỌN maso_thietbi, SUM (soluong) NHƯ “Bài hát so luong”
TỪ thiết kế
GROUP BY maso_thietbi
Ví dụ 3:Nhómcú pháptheo sql Serversử dụng hàm MIN.Cú pháp này sử dụng hàm min MIN để cung cấp cho bạn kết quả tên sản phẩm và số lượng tối thiểu của tên sản phẩm đó.
CHỌN ten_sanpham, MIN (Soluong) NHƯ “Giải quyết được nhiều nhất”
TỪ sanpham
GROUP BY ten_san pham
Ví dụ 4:Nhóm theocú phápSQLtrong Access
CHỌN danh sách trường
Bảng TỪ
Tiêu chí WHERE
Ghi chú:
– Danh sách trường là tên của một hoặc nhiều trường cần truy xuất
– Table là tên của bảng cần lấy các bản ghi
Tiêu chí là điều kiện cho WHERE.mệnh đề
– Danh sách nhóm là tên của tối đa 10 trường được sử dụng để nhóm các bản ghi theo thứ tự từ cấp nhóm cao nhất đến cấp thấp nhất.3. Lưu ý về nhóm của.chỉ huy
– Mệnh đề GROUP BY luôn phải tuân theo điều kiện của mệnh đề WHERE, tức là sau khi viết xong mệnh đề WHERE, bạn hãy xuống dòng đến mệnh đề GROUP BY.– Mệnh đề ORDER BY luôn theo sau mệnh đề GROUP BY nếu được sử dụng trong cú pháp truy vấn dữ liệu.
Trên đây là những chia sẻ của chúng tôi vềcâu lệnhgroup bycủa ngôn ngữ sql, một câu lệnh dùng kết hợp với mệnh đề WHERE để nhóm trong sql cùng một dữ liệu.Hy vọng rằng từ những thông tin về cú pháp trên, bạn có thể học và thực hành với kết quả tốt hơn khi sử dụng ngôn ngữ SQL.
Lĩnh vực công nghệ thông tin, đặc biệt là cấu trúc dữ liệu ngày càng quan trọng và trở nên cần thiết hơn đối với nhiều doanh nghiệp.Nhận thấy tầm quan trọng của SQL, Thảo Nguyên – người có nhiều năm học tập và làm việc trong lĩnh vực công nghệ thông tin đã quyết định thành lập trang web để chia sẻ những kiến thức và kinh nghiệm của mình trong lĩnh vực này.Lĩnh vực SQL dành cho những bạn đam mê và muốn hiểu rõ hơn về lĩnh vực này.

Cú pháp mệnh đề liên hợp trong SQL → Lệnh cập nhật SQL → Lệnh chèn trong SQL →
Mệnh đề GROUP BY của SQL Server
Mệnh đề GROUP BY trong SQL Server cho phép bạn sắp xếp các hàng của truy vấn theo nhóm.Nhóm được xác định bởi các cột mà bạn chỉ định trong mệnh đề GROUP BY.Thông thường, GROUP BY được sử dụng để tính tổng theo điều kiện, đếm các bản ghi thỏa mãn các điều kiện nhất định hoặc tìm dữ liệu MIN, MAX.
Để giúp bạn dễ dàng làm theo cách sử dụng GROUP BY trong SQL Server và để làm ví dụ, chúng tôi sẽ sử dụng bảng dữ liệu sau trong toàn bộ bài viết.
Bảng có tên làQuantrimang.com, có 4 cột IDchuyenmuc, Muccon, Chuyenmuclon, Sobai và 6 hàng như sau:
+------------+----------+-------------+-------+ |IDChuyenmuc | Muccon |Chuyenmuclon | Sobai | +------------+----------+-------------+-------+ | 1 |SQL Server|Lap trinh | 101 | | 2 |Facebook |Mang xa hoi | 152 | | 3 |Python |Lap trinh | 101 | | 4 |JavaScript|Lap trinh | 122 | | 5 |Chrome |Web | 94 | | 6 |Instagram |Mang xa hoi | 165 | +------------+----------+-------------+-------+Cú pháp mệnh đề GROUP BY trong SQL Server
SELECT bieu_thuc1, bieu_thuc2,... bieu_thuc_n, ham_tong_hop (bieu_thuc) FROM ten_bang
Ví dụ – sử dụng SUM.chức năng
SELECT Chuyenmuclon, SUM(Sobai) AS "Tong" FROM
Vì bạnchỉ địnhmột cột (Chuyenmuclon) trong câu lệnh SELECT chứ không phải trong hàm SUM, bạn sẽ phải sử dụng mệnh đề GROUP BY.
Sau đó, chúng tôi có bảng kết quả sau:
+--------------+------+ | Chuyenmuclon | Tong | +--------------+------+ |Lap trinh | 324 | |Mang xa hoi | 317 | |Web | 94 | +--------------+------+Ví dụ – sử dụng COUNT.chức năng
SELECT COUNT(Chuyenmuclon), Chuyenmuclon FROM
+------+--------------+ | | Chuyenmuclon | +------+--------------+ | 3 | Lap trinh | +------+--------------+Nếu bạn không muốn lấy tên cột mà chỉ trả về số lượng mục con, hãy chạy lệnh sau:
SELECT COUNT(Chuyenmuclon) FROM
SELECT Chuyenmuclon, MIN(Sobai) AS "So luong it nhat" FROM

Ví dụ – sử dụng MAX.chức năng
SELECT Chuyenmuclon, MAX(Sobai) AS "So bai cao nhat" FROM

Bài trước: Điều kiện tồn tại trong SQL Server
Bài tiếp theo: Mệnh đề HAVING trong SQL Server
Mệnh đề WHERE trong SQLMệnh đề SQL Server FROMMệnh đề WHERE trong SQL ServerMệnh đề ORDER BY của SQL ServerĐiều kiện HOẶC trong SQL ServerMệnh đề DISTINCT của SQL ServerĐiều kiện LÀ NULL trong SQL ServerSQL Server: Nhóm theo lệnh trong SQL Server có thể bạn chưa biết
Trong hướng dẫn này, bạn sẽ tìm hiểuGROUP BY,GROUPING SET,CUBE,ROLLUPvà các điều khoảnHAVINGtrong SQL Server để sắp xếp hồ sơ theo nhóm.Mệnh đề GROUP BY của SQL Server
Giới thiệu về mệnh đề GROUP BY trong SQL Server
CácGROUP BYkhoản SQL Server cho phép bạn sắp xếp các hồ sơ của một truy vấn bởi nhóm.Nhóm được xác định bởi các cột mà bạn chỉ định trongGROUP BY.
Sau đây minh họa cú pháp mệnh đềGROUP BYtrong SQL Server:
SELECT select_listFROM table_nameGROUP BY column_name1, column_name2 ,...;SQLCopy
Trong truy vấn này, mệnh đềGROUP BYđã tạo một nhóm cho mỗi tổ hợp giá trị trong các cột được liệt kê trong mệnh đềGROUP BY.
Xem ví dụ sau:
SELECT customer_id, YEAR (order_date) order_yearFROM sales.ordersWHERE customer_id IN (1, 2)ORDER BY customer_id;SQLCopy
Đây là kết quả:

Trong ví dụ này, chúng tôi đã truy xuất thông tin id khách hàng và năm đặt hàng của những khách hàng có id 1 và 2.
Như bạn có thể thấy trong đầu ra, khách hàng có id 1 đã đặt một đơn hàng vào năm 2016 và hai đơn hàng vào năm 2018. Khách hàng có id hai đã đặt hai đơn hàng vào năm 2017 và một đơn hàng vào năm 2018.
Hãy thêm mệnh đềGROUP BYvào truy vấn trên và xem kết quả:
SELECT customer_id, YEAR (order_date) order_yearFROM sales.ordersWHERE customer_id IN (1, 2)GROUP BY customer_id, YEAR (order_date)ORDER BY customer_id;SQLCopy
Đây là kết quả:

Mệnh đề đãGROUP BYsắp xếp ba bản ghi khách hàng đầu tiên có id 1 thành hai nhóm và ba bản ghi khách hàng tiếp theo có id 2 thành hai nhóm khác với sự kết hợp duy nhất của id khách hàng và hàng năm đặt phòng.
Về mặt chức năng, mệnh đềGROUP BYtrong truy vấn trên tạo ra kết quả giống như truy vấn sau bằng cách sử dụngDISTINCT:
SELECT DISTINCT customer_id, YEAR (order_date) order_yearFROM sales.ordersWHERE customer_id IN (1, 2)ORDER BY customer_id;SQLCopy
Đây là kết quả:

Mệnh đề GROUP BY của SQL Server và hàm tổng hợp
Trong thực tế, các mệnh đềGROUP BYthường được sử dụng với chức năng tổng hợp để tạo báo cáo tóm tắt.
Một hàm tập hợp thực hiện phép tính trên một nhóm và trả về một giá trị duy nhất cho mỗi nhóm.Ví dụ, hàmCOUNT()trả về số lượng bản ghi trong mỗi nhóm.Các hàm tập hợp thường được sử dụng khác làSUM()(tổng),AVG()(trung bình),MIN()(tối thiểu),MAX()(tối đa).
Mệnh đềGROUP BYsắp xếp các bản ghi thành các nhóm và thực hiện các chức năng đã đặt (đếm, tối thiểu, tối đa, trung bình, tổng, v.v.) cho mỗi nhóm.
Ví dụ: truy vấn sau trả về số lượng đơn đặt hàng của khách hàng theo năm:
SELECT customer_id, YEAR (order_date) order_year, COUNT (order_id) order_placedFROM sales.ordersWHERE customer_id IN (1, 2)GROUP BY customer_id, YEAR (order_date)ORDER BY customer_id; SQLCopy
Đây là kết quả:

Nếu bạn muốn thêm bất kỳ cột hoặc biểu thức nào không được liệt kê trongGROUP BY, bạn phải sử dụng cột đó làm đầu vào cho hàm set.
Nếu không, bạn sẽ gặp lỗi vì không có gì đảm bảo rằng cột hoặc biểu thức sẽ trả về một giá trị duy nhất cho mỗi nhóm.
Ví dụ: truy vấn sau sẽ không thành công:
SELECT customer_id, YEAR (order_date) order_year, order_statusFROM sales.ordersWHERE customer_id IN (1, 2)GROUP BY customer_id, YEAR (order_date)ORDER BY customer_id;SQLCopy
Ví dụ về mệnh đề GROUP BY trong SQL Server
Hãy lấy thêm một số ví dụ để hiểu cách hoạt động của mệnh đềGROUP BY.
Sử dụng mệnh đề GROUP BY với hàm COUNT () trong SQL ServerTruy vấn sau trả về số lượng khách hàng ở mỗi thành phố:
SELECT city, COUNT (customer_id) customer_countFROM sales.customersGROUP BY cityORDER BY city;SQLCopy
Đây là kết quả:

Trong ví dụ này, mệnh đềGROUP BYnhóm các khách hàng lại với nhau theo thành phố và hàmCOUNT()trả về số lượng khách hàng ở mỗi thành phố.
Tương tự, truy vấn sau trả về số lượng khách hàng theo tiểu bang và thành phố.
SELECT city, state, COUNT (customer_id) customer_countFROM sales.customersGROUP BY state, cityORDER BY city, state;SQLCopy
Đây là kết quả:


TẬP HỢP NHÓM trong SQL Server
Giới thiệu về GROUPING SETS trong SQL Server
Theo định nghĩaGROUPING SETSlà một nhóm các cột mà bạn nhóm. Thông thường, một truy vấn với một tập hợp xác định một tập hợp nhóm duy nhất.
Ví dụ: truy vấn sau xác định một tập hợp nhóm bao gồm thương hiệu và danh mục được biểu thị là(brand, category). Truy vấn trả về số tiền bán hàng được nhóm theo thương hiệu và danh mục:
SELECT brand, category, SUM (sales) salesFROM sales.sales_summaryGROUP BY brand, categoryORDER BY brand, category;SQLCopy

Truy vấn sau đây trả về số lượng bán hàng theo thương hiệu. Nó xác định một tập hợp nhóm(brand):
SELECT brand, SUM (sales) salesFROM sales.sales_summaryGROUP BY brandORDER BY brand;SQLCopy

Truy vấn sau đây trả về số lượng bán hàng theo danh mục. Nó định nghĩa một tập hợp nhóm(category):
SELECT category, SUM (sales) salesFROM sales.sales_summaryGROUP BY categoryORDER BY category;SQLCopy

Truy vấn sau xác định một tập hợp nhóm trống(). Nó trả về số tiền bán hàng cho tất cả các thương hiệu và danh mục.
SELECT SUM (sales) salesFROM sales.sales_summary;SQLCopy

Bốn truy vấn trên trả về bốn tập kết quả với bốn nhóm:
(brand, category)(brand)(category)()SQLCopy
Để có được tập hợp kết quả thống nhất với dữ liệu tổng hợp cho tất cả các tập hợp nhóm, bạn có thể sử dụng toán tửUNION ALL.
Vì toán tửUNION ALLyêu cầu tất cả tập hợp kết quả có cùng số cột, bạn cần thêm cộtNULLvào danh sách các truy vấn như sau:
SELECT brand, category, SUM (sales) salesFROM sales.sales_summaryGROUP BY brand, categoryUNION ALLSELECT brand, NULL, SUM (sales) salesFROM sales.sales_summaryGROUP BY brandUNION ALLSELECT NULL, category, SUM (sales) salesFROM sales.sales_summaryGROUP BY categoryUNION ALLSELECT NULL, NULL, SUM (sales)FROM sales.sales_summaryORDER BY brand, category;SQLCopy

Truy vấn tạo ra một kết quả duy nhất với các tổng hợp cho tất cả các nhóm nhóm như chúng tôi mong đợi.
Tuy nhiên, nó có hai vấn đề lớn:
Truy vấn khá dài.Truy vấn chậm vì SQL Server cần thực hiện bốn truy vấn con và kết hợp các tập hợp kết quả thành một.Để khắc phục những sự cố này, SQL Server cung cấp một mệnh đề con của mệnh đềGROUP BYđược gọi làGROUPING SETS.
GROUPING SETSđịnh nghĩa nhiều nhóm trong cùng một truy vấn. Sau đây là cú pháp chung củaGROUPING SETS:
SELECT column1, column2, aggregate_function (column3)FROM table_nameGROUP BY GROUPING SETS ( (column1, column2), (column1), (column2), ());SQLCopy
Truy vấn này tạo ra bốn nhóm như sau:
(column1, column2)(column1)(column2)()SQLCopy
Bạn có thể sử dụngGROUPING SETSđể viết lại truy vấn lấy dữ liệu bán hàng như sau:
SELECTbrand,category,SUM (sales) salesFROMsales.sales_summaryGROUP BYGROUPING SETS ((brand, category),(brand),(category),())ORDER BYbrand,category;SQLCopy
Như bạn có thể thấy, truy vấn tạo ra kết quả giống như truy vấn sử dụng toán tửUNION ALL. Tuy nhiên, truy vấn này dễ đọc hơn nhiều và tất nhiên là hiệu quả hơn.
Tìm hiểu thêm vềGROUPING SETtrong SQL Server ở bài viết sau:

Mệnh đề CUBE trong SQL Server
Giới thiệu về mệnh đề 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_summaryGROUP BY brand;SQLCopy
Nếu bạn chưa làm theo hướng dẫnGROUPING SETS, bạn có thể tạo bảngsales.sales_summarybằ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_summaryFROM sales.order_items iINNER JOIN production.products p ON p.product_id = i.product_idINNER JOIN production.brands b ON b.brand_id = p.brand_idINNER JOIN production.categories c ON c.category_id = p.category_idGROUP BY b.brand_name, c.category_name, p.model_yearORDER BY b.brand_name, c.category_name, p.model_year;SQLCopy
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;SQLCopy
CUBElà một mệnh đề con của mệnh đềGROUP BYcho phép bạn tạo nhiều nhóm. Sau đây minh họa cú pháp chung củaCUBE:
SELECT d1, d2, d3, aggregate_function (c4)FROM table_nameGROUP BY CUBE (d1, d2, d3);SQLCopy
Trong cú pháp này, hàmCUBEtạ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_nameGROUP BY GROUPING SETS ( (d1,d2,d3), (d1,d2), (d1,d3), (d2,d3), (d1), (d2), (d3), () );SQLCopy
Nếu bạn cóNcột được chỉ định trongCUBE, bạn sẽ có 2Ntậ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ụngCUBEmột phần như được hiển thị trong truy vấn sau:
SELECT d1, d2, d3, aggregate_function (c4)FROM table_nameGROUP BY d1, CUBE (d2, d3);SQLCopy
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 trongCUBE.
Ví dụ về mệnh đề CUBE trong SQL Server
Câu lệnh sau sử dụngCUBEđể tạo bốn tập nhóm:
(brand, category)(brand)(category)()SELECT brand, category, SUM (sales) salesFROM sales.sales_summaryGROUP BY CUBE(brand, category);SQLCopy
Đây là kết quả đầu ra:


Mệnh đề ROLLUP trong SQL Server
Giới thiệu về mệnh đề ROLLUP trong SQL Server
ROLLUPtrong SQL Server là một mệnh đề con của mệnh đềGROUP BYcung cấp cách viết tắt để xác định nhiềuGROUPING 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, 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)()SQLCopy
Nhưng mệnh đềROLLUP(d1,d2,d3)chỉ tạo ra bốn tập hợp nhóm (giả sử phân cấpd1 > d2 > d3) như sau:
(d1, d2, d3)(d1, d2)(d1)()SQLCopy
Mệnh đềROLLUPthườ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 mệnh đề ROLLUP trong SQL Server
Cú pháp chung của ROLLUP trong SQL Server như sau:
SELECT d1, d2, d3, aggregate_function(c4)FROM table_nameGROUP BY ROLLUP (d1, d2, d3);SQLCopy
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_nameGROUP BY d1, ROLLUP (d2, d3);SQLCopy
Ví dụ về mệnh đề ROLLUP trong SQL Server
Chúng ta sẽ sử dụng lại bảngsales.sales_summarytrongcơ sở dữ liệu mẫuBikeStores đã tạo trong phần hướng dẫn vềGROUPING SETSđể minh họa. Nếu bạn chưa tạo bảngsales.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_summaryFROM sales.order_items iINNER JOIN production.products p ON p.product_id = i.product_idINNER JOIN production.brands b ON b.brand_id = p.brand_idINNER JOIN production.categories c ON c.category_id = p.category_idGROUP BY b.brand_name, c.category_name, p.model_yearORDER BY b.brand_name, c.category_name, p.model_year;SQLCopy
Truy vấn sau đây sử dụngROLLUPđể 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) salesFROM sales.sales_summaryGROUP BY ROLLUP(brand, category);SQLCopy
Đây là đầu ra:

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.

Mệnh đề HAVING trong SQL Server
Giới thiệu về mệnh đề HAVING trong SQL Server
Mệnh đềHAVINGthường được sử dụng với mệnh đềGROUP BYđể lọc các nhóm dựa trên một danh sách các điều kiện. Sau đây minh họa cú pháp mệnh đềHAVING:
SELECT select_listFROM table_nameGROUP BY group_listHAVING conditions;SQLCopy
Trong cú pháp này, mệnh đềGROUP BYsẽ tổng hợp các bản ghi thành các nhóm và mệnh đềHAVINGsẽ áp dụng một hoặc nhiều điều kiện cho các nhóm này.
Chỉ các nhóm thỏa mãn điều kiện trong mệnh đềHAVINGmới được bao gồm trong tập kết quả.
Vì SQL Server xử lý mệnh đềHAVINGsau mệnh đềGROUP BY, bạn không thể sử dụngbí danh cộtđể tham chiếu đến các hàm tập hợp được chỉ định trong câu lệnhSELECT. Truy vấn sau đây sẽ thất bại:
SELECT column_name1, column_name2, aggregate_function (column_name3) column_aliasFROM table_nameGROUP BY column_name1, column_name2HAVING column_alias > value;SQLCopy
Thay vào đó, bạn phải sử dụng các hàm tập hợp trực tiếp trong mệnh đềHAVINGmột cách rõ ràng như sau:
SELECT column_name1, column_name2, aggregate_function (column_name3) aliasFROM table_nameGROUP BY column_name1, column_name2HAVING aggregate_function (column_name3) > value;SQLCopy
Ví dụ về mệnh đề HAVING trong SQL Server
Hãy lấy một số ví dụ để hiểu cáchHAVINGhoạt động của mệnh đề.
Sử dụng HAVING với hàm COUNT trong SQL ServerChúng ta sẽ sử dụng bảngorderstrongcơ sở dữ liệu mẫuBikeStores để minh họa:

Câu lệnh sau đây sử dụng mệnh đềHAVINGđể tìm các khách hàng đã đặt ít nhất hai đơn hàng mỗi năm:
SELECT customer_id, YEAR (order_date), COUNT (order_id) order_countFROM sales.ordersGROUP BY customer_id, YEAR (order_date)HAVING COUNT (order_id) >= 2ORDER BY customer_id;SQLCopy

Trong ví dụ này:
Đầu tiên, mệnh đềGROUP BYnhóm các đơn đặt hàng theo khách hàng và năm đặt hàng. HàmCOUNT()trả về số lượng đơn đặt hàng mỗi khách hàng được đặt trong mỗi năm.Thứ hai, mệnh đềHAVINGsẽ lọc bỏ tất cả các khách hàng có số lượng đơn đặt hàng ít hơn hai.
Trong hướng dẫn này, bạn đã tìm hiểu các mệnh đềGROUP BY,GROUPING SET,CUBE,ROLLUPvàHAVINGtrongSQL Serverđể sắp xếp các bản ghi theo nhóm.
SQL Server•Group By•Created byuser-7ry1lyw2 year(s) ago
Câu Lệnh GROUP BY Trong SQL
46upvote10downvote1 commentSaveAlias Trong SQLJOIN Trong SQL
1 Bình LuậnMệnh đề GROUP BY trong SQL
Mệnh đề ORDER BY trong SQLTừ khóa DISTINCT trong SQL
Mệnh đềGROUP BYtrong SQL used hợp tác with the commands CHỌN for sorting database giống nhau thành groups.Mệnh đề GROUP BY này tuân theo mệnh đề WHERE trong câu lệnh SELECT và đứng trước mệnh đề ORDER BY.
Main content
Cú phápEx exampleCú pháp
Cơ bản cú pháp của đề mục GROUP BY được hiển thị trong sau mã khối.GROUP BY trong SQL phải tuân theo các điều kiện trong mệnh đề WHERE và phải đứng trước mệnh đề ORDER BY nếu mệnh đề được sử dụng.
CHỌN cột1, cột2FROM tên_bảngWHERE <điều kiện>NHÓM THEO cột1, cột2ĐẶT HÀNG THEO cột1, cột2Ex example
Giả sử CUSTOMERS table có các bản ghi sau đây:
Đầu ra:
+ ---- + ---------- + ----- + ----------- + ---------- +| ID | TÊN | TUỔI THƠ | ĐỊA CHỈ | TIỀN LƯƠNG |+ ---- + ---------- + ----- + ----------- + ---------- +| 1 | Hà Anh | 32 | Đà nẵng | 2000,00 || 2 | Vân Hà | 25 | Hà nội | 1500,00 || 3 | Vũ Bằng | 23 | Vinh | 2000,00 || 4 | Thu Minh | 25 | Hà nội | 6500,00 || 5 | Hải An | 27 | Hà nội | 8500,00 || 6 | Hoàng | 22 | Hà nội | 4500,00 || 7 | Bình | 24 | Hà nội | 10000,00 |+ ---- + ---------- + ----- + ----------- + ---------- +Nếu bạn muốn biết tổng mức lương của từng khách hàng, thì truy vấn GROUP BY sẽ như sau.?
đầu tiên2 | SELECTNAME,SUM(SALARY)FROMCUSTOMERSGROUPBYNAME; |
Điều này sẽ tạo ra kết quả sau:
+ ---------- + -------- +| TÊN | SUM (LƯƠNG) |+ ---------- + -------- +| Bình | 10000,00 || Hà Anh | 20000,00 || Hải An | 8500,00 || Hoàng | 4500,00 || Thu Minh | 6500,00 || Vân Hà | 1500,00 || Vũ Bằng | 20000,00 |+ ---------- + -------- +Bây giờ, chúng ta hãy xem một bảng trong đó bảng CUSTOMERS có các bản ghi sau với tên trùng lặp:?
lần đầu tiên23456789ten11 | +| ID |NAME| AGE | ADDRESS | SALARY |+| 1 | Ha Anh | 32 | Ha Noi | 2000.00 || 2 | Ha Anh | 25 | Ha Noi | 1500.00 || 3 | Vu Bang | 23 | Vinh | 2000.00 || 4 | Thu Minh | 25 | Ha Noi | 6500.00 || 5 | Hai An | 27 | Ha Noi | 8500.00 || 6 | Hai An | 22 | Ha Noi | 4500.00 || 7 | Hai An | 24 | Ha Noi | 10000.00 |+ |
Bây giờ một lần nữa, nếu bạn muốn biết tổng mức lương trên mỗi khách hàng, thì truy vấn GROUP BY sẽ giống như sau:?
đầu tiên2 | SELECTNAME,SUM(SALARY)FROMCUSTOMERSGROUPBYNAME; |
Điều này sẽ tạo ra kết quả sau:
+ ---------- + -------- +| TÊN | SUM (LƯƠNG) |+ ---------- + -------- +| Hà Anh | 3500,00 || Hải An | 23000,00 || Thu Minh | 4500,00 || Vũ Bằng | 20000,00 |+ ---------- + -------- +Bài tiếp theo: Từ khóa DISTINCT trong SQL
SQL ORDER BY mệnh đề từ khóaDISTINCT trong SQL
Video SQL-39: Câu lệnh GROUP BY
Cảm ơn các bạn đã theo dõi bài viết Mệnh đề GROUP BY trong SQL. Chúng tôi hi vọng đã mang đến thông tin hữu ích cho bạn. Mọi ý kiến đóng góp hoặc thắc mắc hãy comment bên dưới dưới, chúng tôi sẽ phản hồi sớm nhất có thể. giasuviet.edu.vn chúc bạn ngày mới tốt lành