怎么在ROW_NUMBER()OVER(PARTITION BY基础上,把排名后几位的再做汇总?

好记忆不如烂笔头abc 2020-04-09 11:12:24
以下结果是通过ROW_NUMBER()OVER(PARTITION BY xxx ORDER BY SUM(xx) desc ) AS rn这个函数获得的排序结果,得到如下14条记录:
名称 数量 排名
a 19 1
b 2 2
c 2 3
d 2 4
e 1 5
f 1 6
g 1 7
h 1 8
i 1 9
j 1 10
k 1 11
l 1 12
m 1 13
n 1 14

希望在此基础上从排名10到14的数量做汇总得到5,取列名为other
最终输出的结果是:
a 19
b 2
c 2
d 2
e 1
f 1
g 1
h 1
i 1
other 5

高手帮忙看看怎么写这个sql,给个例子,解决立即给分,非常感谢!
...全文
285 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2020-04-09
  • 打赏
  • 举报
回复
就一次,with t as (这里做排名) 这里选择
  • 打赏
  • 举报
回复
引用 1 楼 Hello World, 的回复:
参考
DECLARE @t TABLE(名称 VARCHAR(10) NOT NULL,	数量 INT NOT NULL,	排名 INT NOT NULL)
INSERT @t(名称, 数量, 排名)
VALUES
('a',19,1),('b',2,2),('c',2,3),('d',2,4),
('e',1,5),('f',1,6),('g',1,7),('h',1,8),
('i',1,9),('j',1,10),('k',1,11),
('l',1,12),('m',1,13),('n',1,14)

SELECT * FROM (SELECT TOP(9) 名称, 数量 FROM @t ORDER BY 排名) t
UNION ALL
SELECT 'other',SUM(数量) FROM @t WHERE 排名>9
谢谢版主,我也想到这种方法了,这样用了两次ROW_NUMBER()OVER(PARTITION BY,有没有效率更高的写法呢?
Hello World, 2020-04-09
  • 打赏
  • 举报
回复
参考
DECLARE @t TABLE(名称 VARCHAR(10) NOT NULL,	数量 INT NOT NULL,	排名 INT NOT NULL)
INSERT @t(名称, 数量, 排名)
VALUES
('a',19,1),('b',2,2),('c',2,3),('d',2,4),
('e',1,5),('f',1,6),('g',1,7),('h',1,8),
('i',1,9),('j',1,10),('k',1,11),
('l',1,12),('m',1,13),('n',1,14)

SELECT * FROM (SELECT TOP(9) 名称, 数量 FROM @t ORDER BY 排名) t
UNION ALL
SELECT 'other',SUM(数量) FROM @t WHERE 排名>9

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧