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
子句里。