分组数据
概念
按照指定条件筛选部分组
来由
如果不用分组那么聚集函数只会对整个列进行聚集
但是如果想对一列中分组聚集呢?
比如一列中同一个值的算一组
然后对每组进行聚集运算
用例
SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
实验发现不要GROUP BY时候就只有一行
GROUP BY 的结果会自动按 vend_id 有序
但是GROPU BY只会排序GROUP BY的字段
其他方面的排序要加用用OERDER BY
GROUP BY 位置
WHERE 后
ORDER BY 前
思路
GROUP BY是为了给SELECT旁边的聚合进行分组
GROUP BY要指定列,这个列也要被SELECT选出来
过滤分组
来由
如果想挑出GROUP BY分的多组中的部分
HAVING
选出分组数大于等于二的
HAVING COUNT(*) >= 2
和WHERE的区别
WHERE是按行进行筛选
选出的是特定的行
HAVING是按分组进行筛选
选出的是特定的组
和WHERE配合使用
SELECT vend_id, COUNT(*) AS num_prods
WHERE prod_pice >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2
WHERE选出特定的行
GROPU BY把特定行按照特定列的值进行分组
HAVING再所有分组中选出特定的分组