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?
Bài liên quan
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é.
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ácFunction
(SUM,AVG,COUNT…) trên các thuộc tính của Bảng.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)