oracle给每行加上序号,Oracle 根据分类字段给查询结果添加序号

本文介绍了如何使用纯SQL进行分类排序,包括为记录添加递增序号和逐类别统计行数。通过实例展示了如何利用窗口函数ROW_NUMBER()和SUM()来完成任务,并附带了详细步骤和一个实际操作的案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、分类排序

SELECT ROW_NUMBER() OVER(PARTITION BY T.CLASS_NAME ORDER BY T.SCORE) AS IDX, T.* FROM TB_SCORE T;

df1cf2b91eaa2a814abb4bc9832f1a97.png

二、分类逐行统计

SELECT SUM(T.STU_NUM) OVER(PARTITION BY T.CLASS_NAME ORDER BY T.SCORE DESC) AS IDX, T.* FROM TB_SCORE T;

ec77c4c584e9e7e9e018c2a83a38876e.png

PS:纯SQL实现分类排序

--==============================================

-- 根据分类字段给记录添加递增或递减序号

--============================================

SELECT RN, IDX, YEAR_S, RELEASE_TIME FROM (

-- 获取分类后的序号 IDX

SELECT (

SELECT COUNT(1) FROM (

-- 获取排序序号 RN, 得到临时表二

SELECT T.*, ROWNUM AS RN FROM (

-- 获取分类字段 YEAR_S

SELECT TO_CHAR(T.RELEASE_TIME, 'YYYY') AS YEAR_S, T.* FROM TABLE_NAME T ORDER BY T.RELEASE_TIME

) T

) WHERE YEAR_S=T1.YEAR_S AND RN <= T1.RN -- 重点: 临时表一和临时表二关联, 分类字段相同, 统计表二排序字段小于等于当前记录排序字段的记录数; RN >= T1.RN 则递减

) AS IDX, T1.* FROM (

-- 获取排序序号 RN, 得到临时表一

SELECT T.*, ROWNUM AS RN FROM (

-- 获取分类字段 YEAR_S

SELECT TO_CHAR(T.RELEASE_TIME, 'YYYY') AS YEAR_S, T.* FROM TABLE_NAME T ORDER BY T.RELEASE_TIME

) T

) T1

) WHERE IDX <= 3 ORDER BY RELEASE_TIME

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值