Khi truy vấn mẩu tin trờn một hay nhiều bảng dữ liệu, thụng thường cú những bản ghi nào đú cựng giỏ trị.
Mệnh đề GROUP BY…được thờm vào SQL bởi vỡ cỏc hàm tập hợp (như SUM) trả về một tập hợp của cỏc giỏ trị trong cột mỗi khi chỳng được gọi, và nếu khụng cú GROUP BY ta khụng thể nào tớnh được tổng của cỏc giỏ trị theo từng nhúm riờng lẻ trong cột.
Cỳ phỏp của GROUP BY như sau:
SELECT tờn_cột, SUM (tờn_cột) FROM tờn_bảng GROUP BY tờn_cột
Vớ dụ 1:
Giả sử ta cú bảng Sales như sau:
Company Amount
W3Schools 5500
IBM 4500
KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Cõu lệnh SQL sau:
SELECT Company, SUM (Amount) FROM Sales
sẽ trả về kết quả:
Company SUM(Amount)
W3Schools 17100
IBM 17100
W3Schools 17100
Kết quả trả về ở trờn đụi khi khụng phải là cỏi mà ta mong đợi. Ta thờm mệnh đề GROUP BY vào trong cõu lệnh SQL:
SELECT Company, SUM (Amount) FROM Sales GROUP BY Company và kết quả trả về lần này sẽ là:
Company SUM(Amount)
W3Schools 12600
IBM 4500
Kết quả này đỳng là cỏi mà ta mong muốn.
Vớ dụ 2: Cho cơ sở dữ liệu quản lý thụng tin bỏn hàng của cỏc đại lý gồm cỏc quan hệ sau:
S(S#, Sname, City, Status)
P(P#, Pname, Color, Weight, Price) SP(S#, P#, Sdate, QTY)
Tỡm số lượng cung cấp lớn nhất của từng mặt hàng? Select P#, max (QTY)
From SP Group by P#
KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Khi sử dụng Group by ta thường sử dụng mệnh đề HAVING đi kốm. Having được thờm vào SQL vỡ mệnh đề WHERE khụng ỏp dụng được đối với cỏc hàm tập hợp (như SUM). Nếu khụng cú HAVING, ta khụng thể nào kiểm tra được điều kiện với cỏc hàm tập hợp.
Cỳ phỏp của HAVING như sau:
SELECT tờn_cột, SUM (tờn_cột) FROM tờn_bảng
GROUP BY tờn_cột
HAVING SUM (tờn_cột) điều_kiện giỏ_trị
Ta sử dụng lại bảng Sales ở trờn. Cõu lệnh SQL sau:
SELECT Company, SUM (Amount) FROM Sales GROUP BY Company
HAVING SUM (Amount) > 10000 sẽ trả về kết quả:
Bảng SP
KHOA CNTT – TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Chỳ ý:
Mệnh đề GROUP BY
Cỏc thuộc tớnh trong mệnh đề GROUP BY phải được xuất hiện trong
mệnh đề SELECT.
Mệnh đề HAVING:
Chỉ kiểm tra điều kiện trờn nhúm, mệnh đề Having khụng lọc trờn từng
bản ghi. (Điều kiện trong mệnh đề Having tỏc động trờn cỏc bản ghi của một nhúm)
Điều kiện trờn nhúm (ở mệnh đề HAVING) được thực hiện sau khi gom
nhúm.
Điều kiện trong mệnh đề Where tỏc động trờn toàn bộ cỏc bản ghi của bảng