Where & Having
简单讲:having支持所有where操作符,唯一的差别就是where过滤行,having过滤分组。
Select product_id,Count(*) as orders from products
Group by product_id
Having Count(*)>=2
输出结果如下:
01 3
可以这样说:where在数据分组前进行过滤,having在数据分组后进行过滤
需要注意的是:having与group by不适用的数据类型为text、ntext、image
Group by & Order by
Group by:
分组行,但输出可能不是分组的顺序
只可能使用选择列或表达式列,而且必须使用每个选择列表达式
如果与聚集函数一起使用列(或表达式),则必须使用
Order by:
排序产生的输出
任意列都可以使用
不一定需要
Select product_id,Sum(quantity*price) as totalprice
From products
Group by product_id
Having Sum(quantity*price)>=50
Order by totalprice
输出结果如下:
01 55
02 1000
06 2000
03 4000
最后的order by限定了排序,不能仅仅依赖order by
最后,总结一下select 的子句顺序:
Select 要返回的列或者表达式
From 从中检索数据的表
Where 行级过滤
Group by 分组说明(仅在按组计算聚集时使用)
Having 组级过滤
Order by 输出排序顺序