Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用SQL对经过排名的结果集进行转置

用SQL对经过排名的结果集进行转置

作者头像
用户1148526
发布于 2022-11-12 03:43:34
发布于 2022-11-12 03:43:34
1.1K00
代码可运行
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库
运行总次数:0
代码可运行

问题

        想对表中的值进行排名,然后将结果集转置为 3 列。这样做旨在分别显示前 3 名、接下来的 3 名以及其余各行记录。例如,表中记录如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from t1;
+------+
| a    |
+------+
| 5000 |
| 2850 |
| 1500 |
| 3000 |
| 2450 |
| 1300 |
| 3000 |
| 1600 |
| 1250 |
| 2975 |
| 1250 |
| 1100 |
|  950 |
|  800 |
+------+
14 rows in set (0.00 sec)

        想根据 a 进行排名,然后将结果转置为 3 列,以得到如下结果集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------+--------+------+
| TOP_3 | NEXT_3 | REST |
+-------+--------+------+
|  5000 |   2850 | 1500 |
|  3000 |   2450 | 1300 |
|  3000 |   1600 | 1250 |
|  2975 |        | 1250 |
|       |        | 1100 |
|       |        |  950 |
|       |        |  800 |
+-------+--------+------+

实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select max(case when f=1 then a end) TOP_3,
       max(case when f=2 then a end) NEXT_3,
       max(case when f=3 then a end) REST
  from (select a,
               case when rn<=3 then 1 when rn<=6 then 2 else 3 end f,
               row_number() over (partition by case when rn<=3 then 1 when rn<=6 then 2 else 3 end) rn
          from (select a,dense_rank() over (order by a desc) rn from t1) t) t 
 group by rn;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle 分析函数 ROW_NUMBER() 使用
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行。
星哥玩云
2022/08/13
9740
oracle最强大函数之一decode函数的使用[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 decode的几种用法 1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,…,else) 含义为 IF 条件=值1 THEN     RETURN(value 1) ELSIF 条件=值2 THEN     RETURN(value 2)     …… ELSIF 条件=值n THEN     RETURN(value 3) ELSE     RETURN(default) END IF
全栈程序员站长
2022/09/16
5820
Oracle 数据库入门之----------------------多表查询
  SUM(SAL)                                                                                                                                                                                              
互联网CEO
2018/12/11
6240
Oracle 数据库入门之----------------------基本查询
TNAME                          TABTYPE  CLUSTERID                               
互联网CEO
2018/12/11
5850
Oracle学习(二):过滤和排序
1.知识点:可以对照下面的录屏进行阅读 SQL> --字符串大小写敏感 SQL> --查询名叫KING的员工信息 SQL> select * 2 from emp 3 where ename = 'KING'; SQL> --日期格式敏感 SQL> --查询入职日期为17-11月-81的员工 SQL> select * 2 from emp 3 where hiredate='17-11月-81'; --正确例子 SQL> ed 已写入 file afiedt.buf 1
Java架构师必看
2021/05/17
7590
SQL基础-->过滤和排序
--=======================================
Leshami
2018/08/07
6910
Oracle学习(五):多表查询
1.知识点:可以对照下面的录屏进行阅读 SQL> --等值连接 SQL> --查询员工信息: 员工号 姓名 月薪 部门名称 SQL> select empno,ename,sal,dname 2 from emp,dept 3 where emp.deptno=dept.deptno; SQL> --不等值连接 SQL> --查询员工信息: 姓名 月薪 工资级别 SQL> select ename,sal,grade 2 from emp e,salgrade s 3 wh
Java架构师必看
2021/05/17
4240
MySQL去重distinct
在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。
Python之道
2020/04/10
3.9K0
Oracle学习(一):基本操作和基本查询语句
文中以"--"开头的语句为注释,即为绿色部分 1.知识点:可以对照下面的录屏进行阅读 SQL> --录屏工具spool,开始录制,并指定保存路径为c:\基本查询.txt SQL>spool c:\基本查询.txt SQL> --清屏 SQL> host cls SQL> --查看当前用户 SQL> show user USER 为 "SCOTT" SQL> --查询当前用户下的表 SQL> select * from tab; SQL> -- tab数据字典(管理员提供的表) SQL> des
Java架构师必看
2021/05/17
5280
Oracle 数据库入门之----------------------,多行函数
  SUM(SAL)                                                                                                                                                                                        
互联网CEO
2018/12/11
6020
sql系列(基础)-第二章 限制和排序数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117647.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/05
1970
day42_Oracle学习笔记_01
虚拟机上的orcl数据库,所在位置:C:\app\Training\oradata\orcl
黑泽君
2018/10/11
9410
day42_Oracle学习笔记_01
SQL 基础--> 集合运算(UNION 与UNION ALL)
--=============================================
Leshami
2018/08/07
6970
day43_Oracle学习笔记_02
八、子查询 示例代码如下: 子查询.txt SQL> --rownum 行号 SQL> select rownum,empno,ename,sal from emp;     ROWNUM      EMPNO ENAME             SAL                                                                                                                                
黑泽君
2018/10/11
7850
day43_Oracle学习笔记_02
02 . Mysql基础操作及增删改查
SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
iginkgo18
2020/09/27
1.9K0
Oracle 11g LogMiner解析redo日志
SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;
星哥玩云
2022/08/17
8600
Oracle 11g LogMiner解析redo日志
CHECKSUM 分析函数
本文概述了Oracle database 21c中引入的 CHECKSUM 分析函数。可以用于检查表的内容是否已变更。
Yunjie Ge
2022/04/24
9980
Oracle基础教程之手动创建 emp 表 与 dept 表
说明: 有时候我们需要通用的实验数据,emp表 与 dept表  但是Oracle数据库中有没有。 这时,我们可以手动创建。
星哥玩云
2022/08/16
1.8K0
Oracle数据库常见的误操作恢复方法(上)
闪回回来的表如果之前有主键和索引,对应的名字会变成一串字符,虽然不影响使用,但为了规范管理,建议将它们重命名为之前的名字
Alfred Zhao
2022/05/06
4000
Oracle学习(三):单行函数
1.知识点:可以对照下面的录屏进行阅读 SQL> --字符函数 SQL> --字符串的转换 SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写 2 from dual; SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符 SQL> select substr('Hello World',4) from dual; SQL> --subst
Java架构师必看
2021/05/17
1.1K0
相关推荐
Oracle 分析函数 ROW_NUMBER() 使用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验