分组定义:按照特定的列进行分组查询,使用GROUP BY
子句进行分组查询。
注意:
SELECT
后面的列必须出现在group by
子句后面,否则报语法错误;- 通常
group by
子句的位置是where
条件之后,order by
子句之前。
1. 分组求和
插入一条梨的数据(peoduct_id
为4):
SELECT product_name, SUM(price) FROM product GROUP BY product_name;
-
语句分析:先根据商品名称分为三组 苹果、梨、香蕉;再根据不同的分组求和
-
结果:
2. 分组过滤
SELECT COUNT(*) FROM `order` GROUP BY user_id HAVING COUNT(*) > 1;
-
语句分析:查询订单表,根据用户id分组,过滤条件条数大于2
-
注意:
having
与where
其实差别不大:where
通常当做标准的过滤条件having
用作分组过滤条件- 有的数据库管理系统
having
不支持别名作为分组过滤条件中的一部分
-
结果:
3. 分组排序
SELECT COUNT(*) as count FROM `order` GROUP BY user_id ORDER BY count;
-
语句分析:查询订单表,根据客户id分组,根据 行数 排序
-
注意点:经过分组后结果看似经过排序,其实并不能确保是排序后的结果,所以要排序一定要使用
order by
子句 -
结果: