SQL 找出最大和最小的记录,你想找出表里的“极端”值。例如,你希望找到 EMP
表中工资最高和最低的员工。
SQL 找出最大和最小的记录 问题描述
你想找出表里的“极端”值。例如,你希望找到 EMP
表中工资最高和最低的员工。
SQL 找出最大和最小的记录 解决方案
DB2、Oracle 和 SQL Server
使用窗口函数 MIN OVER
和 MAX OVER
分别找出最低和最高的工资值,内嵌视图的查询结果集如下所示。
1 select ename
2 from (
3 select ename, sal,
4 min(sal)over() min_sal,
5 max(sal)over() max_sal
6 from emp
7 ) x
8 where sal in (min_sal,max_sal)
MySQL 和 PostgreSQL
使用两个子查询,分别返回 SAL
的最小值和最大值。
1 select ename
2 from emp
3 where sal in ( (select min(sal) from emp),
4 (select max(sal) from emp) )
SQL 找出最大和最小的记录 扩展知识
有了窗口函数 MIN OVER
和 MAX OVER
,我们就能在每一行里访问到最低和最高的工资值。内嵌视图 X
的查询结果集如下所示。
select ename, sal,
min(sal)over() min_sal,
max(sal)over() max_sal
from emp
ENAME SAL MIN_SAL MAX_SAL
------- ------ ---------- ----------
SMITH 800 800 5000
ALLEN 1600 800 5000
WARD 1250 800 5000
JONES 2975 800 5000
MARTIN 1250 800 5000
BLAKE 2850 800 5000
CLARK 2450 800 5000
SCOTT 3000 800 5000
KING 5000 800 5000
TURNER 1500 800 5000
ADAMS 1100 800 5000
JAMES 950 800 5000
FORD 3000 800 5000
MILLER 1300 800 5000
得到了上述结果集之后,剩下的工作就是返回 SAL
等于 MIN_SAL
或 MAX_SAL
的行。
MySQL 和 PostgreSQL
本解决方案在 IN
列表里用了两个子查询分别找出 EMP
表的最低和最高工资值。外层查询返回的行就是和子查询返回值相匹配的结果。