MySQL 分组查询、聚合函数、排序查询
对emp表按照职位进行分组,并统计每个职位的人数,显示职位和对应人数:
mysql
select epost, count(*) from emp group by epost;
1
按照部门分组,显示部门、最高薪资:
mysql
select deptno, max(salary)
from emp
group by deptno;
1
2
3
2
3
查询每个部门的最高薪资,显示部门、员工姓名、最高薪资:
mysql
select emp.deptno, ename, t1.msal
from emp,
(
select deptno, max(salary) msal
from emp group by deptno
) t1
where emp.deptno = t1.deptno and emp.salary = t1.msal;
1
2
3
4
5
6
7
2
3
4
5
6
7
统计emp表中薪资大于3000的员工个数:
mysql
select count(eno) from emp where salary > 3000;
1
统计emp表中所有员工的薪资总和(不包含奖金):
mysql
select sum(salary) from emp;
1
统计emp表中员工的平均薪资(不包含奖金):
mysql
-- 普通方式计算平均数
select sum(salary) / count(*) from emp;
-- 使用 `avg` 函数求平均数
select avg(salary) from emp;
1
2
3
4
5
2
3
4
5
查询emp表中所有在1978年和1985年之间出生的员工,显示姓名、出生日期:
mysql
select ename, birthday
from emp
where year(birthday) between 1978 and 1985;
1
2
3
2
3
查询要在本月过生日的所有员工:
mysql
SELECT *
FROM emp
WHERE MONTH(CURDATE()) = MONTH(birthday);
1
2
3
2
3
对emp表中所有员工的薪资进行升序(从低到高)排序,显示员工姓名、薪资:
mysql
-- 默认就是升序排序,所以 `asc` 可以省略不写
select ename, salary from emp order by salary;
1
2
2
对emp表中所有员工奖金进行降序(从高到低)排序,显示员工姓名、奖金:
mysql
select ename, bonus
from emp
order by bonus desc;
1
2
3
2
3
查询emp表中的所有记录,分页显示首页记录(前3条记录):
mysql
select * from emp limit 0,3;
1
查询emp表中的所有记录,分页显示(每页显示3条记录),返回第2页:
mysql
select * from emp limit 3,3;
1