SQL 查找最小值和最大值

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 分别等于 1030)会返回 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 子句里。

赞(4)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

SQL 实例