SUM
) thông thường cần thêm
chức năng của mệnh đề GROUP BY
.GROUP BY
...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ụ sử dụng GROUP BY
:Giả sử ta có bảng Sales như sau:
Company | Amount |
---|---|
W3Schools | 5500 |
IBM | 4500 |
W3Schools | 7100 |
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.
HAVING
...Mệnh đề
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ả:Company | SUM(Amount) |
---|---|
W3Schools | 12600 |