用SQL对经过排名的结果集进行转置
SQL 进行 结果 排名 经过 转置
2023-06-13 09:15:02 时间
问题
想对表中的值进行排名,然后将结果集转置为 3 列。这样做旨在分别显示前 3 名、接下来的 3 名以及其余各行记录。例如,表中记录如下:
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 列,以得到如下结果集:
+-------+--------+------+
| TOP_3 | NEXT_3 | REST |
+-------+--------+------+
| 5000 | 2850 | 1500 |
| 3000 | 2450 | 1300 |
| 3000 | 1600 | 1250 |
| 2975 | | 1250 |
| | | 1100 |
| | | 950 |
| | | 800 |
+-------+--------+------+
实现:
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;
相关文章
- sql语句优化之SQL Server(详细整理)
- sql语句对表字段进行修改详解数据库
- MySQL 嵌入式 SQL 的特点和应用场景分析(mysql嵌入式sql)
- MS SQL服务器如何进行数据备份(服务器怎样备份mssql)
- 深入浅出:SQL Server中遍历表的技巧(sqlserver遍历表)
- 运用SQL Server系统库构建完善的数据保障系统(sqlserver系统库)
- 『SQL Server技术:从入门到精通』(sqlserver 方面)
- SQL Server排它锁:保护数据的铁钥匙(sqlserver排它锁)
- 生成SQL Server报告自动生成:准确可靠的性能分析(sqlserver报告)
- 如何使用SQL Server建立工资表(sqlserver工资表)
- SQL Server中列修改操作快速上手(sqlserver列修改)
- MSSQL中最佳的SQL语句编写技巧(sql mssql 语句)
- 语句MSSQL助力生成高效SQL语句(mssql生成sql)
- MySQL操作如何使用SQL窗口进行数据查询和修改(mysql 中sql窗口)
- 使用SQL快速将数据导入Redis(sql导入redis)
- 使用Oracle SQL解答聪明人的问题(oracle sql题)
- 化分析利用Oracle SQL进行量化分析(oracle sql?量)
- 理解Oracle SQL中AS的使用方式(oracle sql里as用法)
- Oracle SQL代码审查引发的期待与担忧(oracle sql评审)