1. 程式人生 > >where 和 hving 的使用區別

where 和 hving 的使用區別

題目描述

查詢成績漲幅超過10次的學生號stu_no以及其對應的漲幅次數t
CREATE TABLE `students` (
`stu_no` int(11) NOT NULL,
`grade` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`stu_no`,`from_date`));

 

select stu_no,count(stu_no) as t
from students
group by stu_no
HAVING t > 15

select stu_no,count(stu_no) as t
from students
where count(stu_no) > 15
group by stu_no

WHERE語句在GROUP BY語句之前;SQL會在分組之前計算WHERE語句。   

HAVING語句在GROUP BY語句之後;SQL會在分組之後計算HAVING語句。

所以第二種方法是錯誤的,sql語句的執行過程是:from-->where-->group by -->having --- >order by --> select;

 

聚合函式是針對結果集進行的,where之後並不是結果集,所以主函式放在where語句中,會出現錯誤,

而having是針對結果集做篩選,用having來代替where,having一般跟在group by後