30/09/2018, 19:49

sự khác nhau giữa WHERE và HAVING

ai có thể giải thích cho em biết sự khác nhau giữa WHERE và HAVING trong SQL được không, em vẫn chưa rõ lắm.
liệu sau GROUP BY có dùng WHERE được không và vì sao?

Phan Hoàng viết 22:05 ngày 30/09/2018

Dùng được chứ.

WHERE - filter kết quả theo dòng
HAVING - filter kết quả theo GROUP

Ví dụ: bạn có 1 bảng như sau (3 trường student, subject, mark nhé)
A, math, 8
A, physics, 5
B, math, 4
C, physics, 9

Câu lệnh: SELECT student, sum(mark) from math GROUP BY student, nó sẽ ra
A, 13 (nó kiếm student giống nhau, ở đây 2 dòng đều có A nên lấy SUM)
B, 4
C, 9

Câu lệnh: SELECT student, sum(mark) from math WHERE mark > 5 GROUP BY student, nó sẽ ra
A, 8
C, 9
nó sẽ check WHERE từng dòng trước, sau đó mới GROUP BY

Câu lệnh: SELECT student, sum(mark) as s from math WHERE mark > 5 GROUP BY student HAVING s>8, nó sẽ ra
C,9
HAVING thì mới dùng với các điều kiện của cả nhóm (GROUP) như max, sum, count, … được (gọi là các hàm tổng hợp (AGGREGATE function) được define trên 1 tập hợp)

Chú ý: WHERE phải trước GROUP BY nhé.

Phạm Hoàng Tuấn viết 21:50 ngày 30/09/2018

Bạn ở trên nói đúng rồi, mình tóm tắt lại là Where thường dùng để tìm điều kiện cho thuộc tính của Bảng, còn Having thường dùng để tìm điều kiện trên các Function (SUM,AVG,COUNT…) trên các thuộc tính của Bảng.

Min Jsa viết 21:49 ngày 30/09/2018

Where : Là câu lệnh điều kiện trả kết quả đối chiếu với từng dòng .
Having : Là câu lệnh điều kiện trả kết quả đối chiếu cho nhóm (Sum,AVG,COUNT,…)

Vì vậy mà sau GROUP BY thì sẽ chỉ dùng được Having .
còn Where thì KHÔNG dùng được sau GROUP BY đâu nhé. bạn cứ cmd thì biết liền ý mà.

(HAVING có thể thay thế vị trí dùng cho WHERE. nhưng . ngược lại WHERE thì KHÔNG thể thay thế vị trí cho HAVING nhé bạn)

Bài liên quan
0