group by 与 where, having以及顺序

1. GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前. HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having在执行。)

 

group by 与 where, having以及顺序

 group by 与 where, having以及顺序

 

 

2. 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子

句中给出。count()为聚集函数,vend_id在后面groupby中有,所以select后面有。group by 与 where, having以及顺序

 

 

group by 与 where, having以及顺序

select vend_id, count(*) , sales  from products group by vend_id;

这个语句,其中sales字段,在group by中没有,所以查询的结果,sales的值是错误的!!!(切记)

 

如果想用分组后的,sales的字段,可以采用left join的方式,相当于两个表匹配的方式,查询:(原始表B)

select vend_id, sales from B left join (select vend_id, count(*) nums, min(sales) sales   from products group by vend_id) as A on B.vend_id = A.vend_id WHERE.......

 

 

3. 语句顺序

group by 与 where, having以及顺序

 

 group by 与 where, having以及顺序

 

 

group by 与 where, having以及顺序

group by 与 where, having以及顺序

上一篇:[转帖]grep -v、-e、-E


下一篇:SQL Server MERGE(合并)语句