聚合函数
计数:
- COUNT(*) 或者 COUNT(1) 确定表的行数
- COUNT([列名]) 统计非空行的个数
- COUNT(DISTINCT [列名]) 统计不重复的行的个数
求和:
- SUM([列名])
可以同时操作多个列,只对数值型起作用
会跳过空值
SELECT SUM(IFNULL(sale_price,0) - IFNULL(in_price,0)) FROM milk_tea;
求均值:
- AVG([列名])
分母不对NULL计数,可以同时操作多个列
最大最小值:
- MAX([列名])
- MIN([列名])
数据分组
数据分组一定是与聚合函数同时出现的,数据分组服务于聚合函数。
使用GROUP BY选择一个列作为分组列,称为聚合键,一行数据代表一个分组。NULL 单独一组
SELECT 展示必须与分组对应。其结果相当于Excel的数据透视表。
SELECT FROM WHERE GROUP BY --选择、过滤、分组
SELECT m.net_w, SUM(m.sale_price) FROM milk_tea AS m WHERE m.net_w IN ('100g', '150g') GROUP BY m.net_w;
分组过滤:
对分组过后的结果进行筛选,相当于对数据透视表使用切片器。
SELECT FROM WHERE GROUP BY HAVING;
被WHERE 过滤掉的行不参与分组。
SELCET brand, COUNT(*) FROM milk_tea WHERE cost > 5 GROUP BY brand HAVING COUNT(*) >= 2;
上句话的意思是:先对cost列进行筛选,选出cost>5的行,然后对结果使用brand进行分组,使用COUNT求出每组包含的行数,选出有两行及以上记录的品牌。