分组查询 – group by
(1)单列分组查询
语法: select f1,f2,f3,f4...
from table_name
group by f;
说明:f表示要根据f列进行分组
强调:在进行分组查询的时候,分组所依据的f列上的值
要有一定的重复性,否则分组没有什么意义。
例子:查询员工表,按照部门对所有员工进行分组查询
select *
from t_employee
group by deptno;
说明:group by deptno是按照部门进行分组,分组以后查询的结果只是显示了该组中的一条数据。
这种简单的分组查询操作,没有任何实际的意义,建议与统计函数一起使用。
语法: select function(f1),function(f2),...
from table_name
group by f;
例子:查询员工表,按照部门进行分组查询,同时显示每组中的员工人数,每组中员工的工资总和,以及平均工资,每组中最高工资和最低工资.
select deptno,count(ename),sum(sal),avg(sal),
max(sal),min(sal),ename
from t_employee
group by deptno;
select deptno,count(ename),group_concat(ename)
from t_employee
group by deptno;
说明:group_concat()函数能够将分组后的内容连接显示
(2)多列分组查询
分组查询操作 – 根据多个字段
语法:select function(f1),function(f2)...
from table_name
group by field1,field2...
说明:先根据field1分组,然后针对分组后的内容在根据
field2分组...
例子:查询员工表,先按照部门对所有员工进行分组,然后在按照入职日期对每组员工再分组。查询显示每组的员工姓名和人数。
select deptno,Hiredate,count(ename),
group_concat(ename)
from t_employee
group by deptno,Hiredate;
(3)分组后的条件数据查询 – having关键字
语法:select function(f1),function(f2)...
from table_name
group by f...
having 条件;
说明:条件数据查询有where和having。
having关键字只用在分组数据查询中,
而且必须在group by之后使用。
例子:查询员工表,按照部门进行分组,显示平均工资高于2000的员工姓名。
select deptno,group_concat(ename),avg(sal)
from t_employee
group by deptno
having avg(sal)>2000;