分组:group by
把数据分为多个逻辑组,以便对每个组进行聚集运算。
例:先按v_id排序并分组,然后计算每个供应商的产品数目
selete v_id,count(*) as num
from products
group by v_id;
group by使用规定:
- group by子句可以包含任意数目的列——分组可以嵌套;
- group by子句给出的列都必须是检索列或有效的表达式,不能是聚集函数。(在selete中使用表达式,则在group by中使用相同的表达式,不能是别名);
- 若分组列中有null值,则null将作为一个分组返回;
- group by必须在where之后,order by之前,即先限制检索,再分组,再排序。
过滤分组:having
where和having的区别:
where过滤的是行,having过滤的是分组。也可以这么理解:where在分组前过滤,having在分组之后过滤。
例:
selete cust_id,count(*)as orders
from orders
group by cust_id
having count(*)>=2;