2025年Oracle样例数据库(SCOTT)的SQL查询题

Oracle样例数据库(SCOTT)的SQL查询题请用一条 sql 语句查询出 scott emp 表中每个部门工资前三位的数据 显示结果如下 DEPTNO SAL1 SAL2 SAL3 10 5000 2450 1300 20 3000 2975 1100 30 2850 1600 1500

大家好,我是讯享网,很高兴认识大家。

请用一条sql语句查询出scott.emp表中每个部门工资前三位的数据,显示结果如下:

DEPTNO    SAL1      SAL2       SAL3

---------------- ---------- ------------

    10         5000       2450       1300

    20         3000       2975       1100

   30          2850       1600       1500 则,该语句为:


讯享网

SELECT deptno, max( sal ) sal1, max(decode( RN, 2, sal )) sal2, min( sal ) sal3 FROM ( SELECT * FROM ( SELECT DEPTNO, SAL, ROW_NUMBER () OVER ( PARTITION BY DEPTNO ORDER BY SAL DESC ) AS RN FROM EMP ) WHERE RN <= 3 ) GROUP BY deptno

讯享网

下面来分析一下这个题

1.首先将emp表按deptno进行分组,取出分组后的前3条数据

讯享网SELECT * FROM ( SELECT DEPTNO, SAL, ROW_NUMBER () OVER ( PARTITION BY DEPTNO ORDER BY SAL DESC ) AS RN FROM EMP ) WHERE RN <= 3 

row_number() over()函数,用于给数据库表中的记录进行标号,在使用的时候,其后还跟着一个函数 over(),而函数 over() 的作用是将表中的记录进行分组和排序

即:ROW_NUMBER() OVER(PARTITION BY 分组的字段名 ORDER BY 排序的字段名)

2.将上面的查询作为子查询

SELECT deptno, max( sal ) sal1, max(decode( RN, 2, sal )) sal2, min( sal ) sal3 FROM ( SELECT * FROM ( SELECT DEPTNO, SAL, ROW_NUMBER () OVER ( PARTITION BY DEPTNO ORDER BY SAL DESC ) AS RN FROM EMP ) WHERE RN <= 3 ) GROUP BY deptno

使用decode()函数判断字符串是否一样,DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

小讯
上一篇 2025-03-23 10:01
下一篇 2025-03-08 12:23

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/53367.html