使用分析函数进行行列转换

简介: 其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询: SQL> SELECT deptno, ename, 2 ROW_NUMBER () OVER (PARTITION BY ...
其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询:
SQL> SELECT deptno, ename,
2         ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) seq
3    FROM emp;
DEPTNO ENAME             SEQ
---------- ---------- ----------
10 KING                1
10 CLARK               2
10 MILLER              3
20 SCOTT               1
20 FORD                2
20 JONES               3
20 ADAMS               4
20 SMITH               5
30 BLAKE               1
30 ALLEN               2
30 TURNER              3
30 WARD                4
30 MARTIN              5
30 JAMES               6
14 rows selected.


再结合其他函数进行一下行列转换:
SQL> select deptno,
2  max(decode(seq,1,ename,null)) highest,
3  max(decode(seq,2,ename,null)) second,
4  max(decode(seq,3,ename,null)) third
5  from (
6  select deptno,ename,
7  row_number() over
8  (partition by deptno order by sal desc) seq
9  from emp)
10  where seq <=3 group by deptno
11  /
DEPTNO HIGHEST    SECOND     THIRD
---------- ---------- ---------- ----------
10 KING       CLARK      MILLER
20 SCOTT      FORD       JONES
30 BLAKE      ALLEN      TURNER
这个结果基本上还是差强人意的。
目录
相关文章
|
7月前
|
关系型数据库 MySQL 数据库
MySQL查询聚合函数与分组查询
MySQL查询聚合函数与分组查询
|
3月前
|
SQL 数据处理
简单行转列
本文介绍了基于配送订单表的数据处理方法,包括使用 `collect_list`、`collect_set` 和 `sort_array` 函数实现行转列操作。通过 SQL 查询,实现了骑手 ID 和配送品类的统计,并对数据进行了去重和排序处理。此外,还提供了相关函数的详细说明和示例,以及数据准备的 SQL 语句。最后推荐了更多关于行转列和列转行的相关文章。
|
5月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day33】行转列,列转行
每天一道大厂SQL题【Day33】行转列,列转行
52 0
每天一道大厂SQL题【Day33】行转列,列转行
|
SQL
SQL中的行转列和列转行
SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。
934 0
SQL中的行转列和列转行
|
SQL Oracle 关系型数据库
oracle数据库分组查询,使用聚合函数
oracle数据库分组查询,使用聚合函数
127 0
|
关系型数据库 MySQL 数据库
MySQL数据库:第六章:分组函数/聚合函数
MySQL数据库:第六章:分组函数/聚合函数
100 0
|
SQL
SQL中行转列、列转行
SQL中行转列、列转行
253 0
SQL中行转列、列转行
|
关系型数据库 Oracle