SQL 找出最大和最小的记录

SQL 找出最大和最小的记录,你想找出表里的“极端”值。例如,你希望找到 EMP 表中工资最高和最低的员工。

SQL 找出最大和最小的记录 问题描述

你想找出表里的“极端”值。例如,你希望找到 EMP 表中工资最高和最低的员工。

SQL 找出最大和最小的记录 解决方案

DB2、Oracle 和 SQL Server
使用窗口函数 MIN OVERMAX 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)

MySQLPostgreSQL
使用两个子查询,分别返回 SAL 的最小值和最大值。

1  select ename
2    from emp
3   where sal in ( (select min(sal) from emp),
4                  (select max(sal) from emp) )

SQL 找出最大和最小的记录 扩展知识

有了窗口函数 MIN OVERMAX 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_SALMAX_SAL 的行。
MySQLPostgreSQL
本解决方案在 IN 列表里用了两个子查询分别找出 EMP 表的最低和最高工资值。外层查询返回的行就是和子查询返回值相匹配的结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程