分組: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;