SQL 查找最小值和最大值,你想查找指定列的最大值和最小值。例如,你希望找出全体员工的最高工资和最低工资,以及每个部门的最高工资和最低工资。
SQL 查找最小值和最大值 问题描述
你想查找指定列的最大值和最小值。例如,你希望找出全体员工的最高工资和最低工资,以及每个部门的最高工资和最低工资。
SQL 查找最小值和最大值 解决方案
要查找全体员工的最低工资和最高工资,只需要分别使用 MIN 函数和 MAX 函数即可。
1 select min(sal) as min_sal, max(sal) as max_sal
2 from emp
MIN_SAL MAX_SAL
---------- ----------
800 5000
为了查找每个部门里的最低工资和最高工资,需要使用 GROUP BY 子句、MIN 函数和 MAX 函数。
1 select deptno, min(sal) as min_sal, max(sal) as max_sal
2 from emp
3 group by deptno
DEPTNO MIN_SAL MAX_SAL
---------- ---------- ----------
10 1300 5000
20 800 3000
30 950 2850
SQL 查找最小值和最大值 扩展知识
为了找到最小值或者最大值,并且把整个表视为一个分组,只需要针对感兴趣的列分别使用 MIN 函数或 MAX 函数即可,不需要使用 GROUP BY 子句。
注意,MIN 函数和 MAX 函数会忽略 Null,而我们可能会遇到 Null 分组,也可能会在一个分组里遇到 Null 值。在下面的查询中,GROUP BY 查询的结果里有两个分组(DEPTNO 分别等于 10 和 30)会返回 Null 值。
select deptno, comm
from emp
where deptno in (10,30)
order by 1
DEPTNO COMM
---------- ----------
10
10
10
30 300
30 500
30
30 0
30 1300
30
select min(comm), max(comm)
from emp
MIN(COMM) MAX(COMM)
---------- ----------
0 1300
select deptno, min(comm), max(comm)
from emp
group by deptno
DEPTNO MIN(COMM) MAX(COMM)
---------- ---------- ----------
10
20
30 0 1300
正如附录 A 所指出的,即使 SELECT 子句里只有聚合函数,我们仍然能按照表中的其他列分组,如下所示。
select min(comm), max(comm)
from emp
group by deptno
MIN(COMM) MAX(COMM)
---------- ----------
0 1300
尽管 DEPTNO 不在 SELECT 子句里,我们仍然按照它分组。把用于分组的列放入 SELECT 子句通常有助于提高可读性,但这并不是必需的。反之,对于含有 GROUP BY 的查询而言,SELECT 列表里的列必须同时出现在 GROUP BY 子句里。
极客教程