一步一步学MySQL----12 分组数据查询
2017-03-29 21:24
302 查看
12.1 简单分组查询
语法:select function() from table_name where condition group by field;
例如:
mysql> select * from employee group by depno; //按照部门号进行分组
执行结果只显示三条数据,原因是表employee中的字段depno的值只有14,10,12三种,首先将所有数据按这三个值分成三组,然后再显示每组中的一条记录。
那么,如果所针对的字段没有重复值将会发生什么情况呢?
下面我们根据员工号(不重复)进行分组看一看
mysql> select * from employee group by empno;
我们看到的执行结果是显示所有数据记录。
12.2 实现统计功能分组查询
如果想显示每个分组中的字段,可以通过group_concat()来实现,该函数可以实现显示每个分组中指定字段值。语法:
select group_concat(field) from table_name where condition group by field;
例如:要求按照部门号对所有员工进行分组,同时显示每组中的员工姓名和每组中员工的个数。
mysql> select depno, group_concat(ename) names from employee group by depno;
//该语句以关键字depno为分组依据,同时通过函数group_concat()获取每组中所指定参数的记录元素。
执行结果显示:分为三组,字段depno为10的记录为一组,depno为12的记录为一组,depno为14的记录为一组,同时通过函数group_concat()显示出了每组中的员工的姓名。
mysql>select depno, group_concat(ename) names, count(ename) num from employee group by depno;
执行结果显示:分为三组,同时通过函数group_concat()显示出了每组中员工的姓名,同时通过函数count()统计每组中员工的人数。
12.3 实现多个字段分组查询
例如:要求首先按照部门号对所有员工进行分组,然后按照雇佣日期对每组进行分组,同时显示每组中的员工姓名和员工人数。mysql> select depno, Hiredate, group_concat(ename) names, count(ename) num from employee group by depno, Hiredate;
执行结果显示:分成了8组,同时还通过函数group_concat()和count()显示了每组中员工的姓名和人数。
12.4 实现HAVING子句限定分组查询
注意:在MySQL中,如果想实现对分组进行条件限制,决不能通过关键字where来实现,因为where关键字主要用来实现条件限制数据记录。为了解决上述问题,MySQL专门提供了关键字Having来实现条件限制分组数据记录。
例如:要求首先按照部门号对所有员工进行分组,然后显示平均工资高于3700的员工的姓名。
第一步:按照部门分组
mysql> select depno from employee group by depno;
第二步:显示每组的平均工资
mysql> select depno, avg(salary) from employee group by depno;
第三步:执行having、group_concat()和count(),显示出平均工资大于3700的每个分组中员工姓名和人数
mysql> select depno, avg(salary), group_concat(ename) names, count(ename) num from employee group by depno having avg(salary)>3700;
相关文章推荐
- 一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询
- mysql按照每天分组查询数据结果排序不是从1到31而是1后接10
- 一步一步学MySQL----9 条件数据记录查询
- Mysql高级查询-----汇总和分组数据
- 一步一步学MySQL----15 多表数据记录查询之合并查询
- MySQL 查询分页数据中分组后取每组的前N条记录
- mysql分组查询并只显示每组数据的前N条数据
- 一步一步学MySQL----10 排序和限制数据记录查询
- mysql分组查询最新数据
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。
- (oracle/mysql)查询出分组查询每组的第一条数据
- MySQL对数据表进行分组查询
- mysql分组查询数据,将数据中null和''作为一组查询结果
- MySQL对数据表进行分组查询(GROUP BY)
- mysql分组查询最大的数据
- oracle或mysql分组查询并且获取前3条排序后的数据
- mysql分组查询最新数据
- MySQL数据按年、月、天分组查询数据
- 一步一步学MySQL----16 多表数据记录查询之子查询
- 一步一步学MySQL----14 夺标数据记录查询之外连接