- 1. 按照部门分组
- select * from empt group by post; # 报错
- 分组后 最小可操作单位应该是组 还不再是组内的单个数据
- 上述命令在没有设置严格模式的时候可正常执行,返回的是分组之后 每个组第一条数据 但是这不符合分组的规范:分组后不应该考虑单个数据,应该以组为操作单位(分组后 没办法直接获取组内单个数据)
- 设置严格模式
- set global set_mode = 'strict_trans_tables, only_full_group_by';
- 严格模式, 分组 默认只能拿到分组的依据
- select post from empt group by post;
- 按照什么分组就只能拿到分组,其他字段不能直接获取 需要借助于一些方法
- 需要分组的关键字
- 每个 平均 最高 最低
- select post,max(salary) from empt group by post;
- as
- 可以给字段起别名 也可以直接省略不写(不推荐)
- select post as '部门‘,max(salary) as '最高工资' from empt group by post;
- 给表临时起别名
- select t1.id, t1.name from empt as t1;
- 聚合函数(必须在分组之后使用)
- min(salary)
- avg(salary)
- sum(salary)
count(id) 推荐id符合逻辑
- count(任意字段均可,但是不能是内容为NULL)
- select post,count(post_comment) from empt group by post; # null不可
- group_concat
- 支持获取分组后的其他字段值
- select post, group_concat(name) from empt group by post;
- 支持拼接操作
- select post, group_concat(name,'_DSB') from empt group by post;
- select post, group_concat(name, ':', salary) from empt group by post;
- concat 不分组的时候用
- select concat('NAME:',name), concat('SAL:', salary) from empt;
- 分组之前帮助获取字段信息并且可以拼接多个字段
- concat_ws:
- 如果多个字段间的连接符合是相同的情况下,可直接使用concat_ws 完成
- select concat_ws(':', name, age, gender) from empt;
- 分组注意事项
- 关键字where和group by 同时出现的时候 group by 必须在 where 的后面
- where先对整体数据进行过滤之后再分组操作
- where筛选条件不能使用聚合函数
-
- select id,name,age from empt where max(salary) > 3000; #错误
- 不分组默认整体就是一组
- 按照书写顺序的方式写sql语句
- select * # 先用*占位
- 补全后面的sql语句
- 最后将* 替换具体字段
posted @
2020-09-06 11:16
MelissaD
阅读(
107)
评论()
收藏
举报