sql - 我如何在前 3 行之后对值求和并将它们分组在其他行下
问题描述
我有一个苹果采摘完成参与者的下表。我有一张桌子,所有参与者都可以看到他们摘下的苹果数量。
现在我想要一张只显示前 3 个的表格,其余的将分组在“其他”下,并且采摘的苹果总数应该与其他苹果相对
我创建了一个包含所有 id 和收集的苹果总数的表
declare @t table
(
id int,
Apples_picked int
)
insert into @t
select 1,10
union
select 2,12
union
select 3,3
union
select 4,15
union
select 5,23
上表所需的输出
ID Name Apples picked
5 winner 23
4 2nd 15
2 3rd 12
Others 13
我不确定如何在第三次之后添加所有内容并总结任何指导非常感谢
解决方案
;WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY Apples_picked DESC) rn
FROM @t
)
SELECT ID,
CASE rn WHEN 1 THEN 'Winner' WHEN 2 THEN '2nd' WHEN 3 THEN '3rd' END AS Name,
cte.Apples_picked
FROM cte
WHERE rn <= 3
UNION ALL
SELECT NULL, 'Others', SUM(apples_picked)
FROM cte
WHERE rn > 3
回报:
ID Name Apples_picked
5 Winner 23
4 2nd 15
2 3rd 12
NULL Others 13
推荐阅读
- c - 分段错误的不确定性
- c# - 为什么删除事件后 Blazor UI 组件不更新?
- pandas - pandas - numpy 使用 np.where 计算和构造新列
- google-apps-script - 选中复选框时将数据行复制到新工作表
- python - 什么是衡量训练性能的好学习率图
- python - 如何解决在 python 中使用 Lxml 的问题?
- amazon-web-services - 我应该使用 AWS lambda 还是 sagemaker 运行预测预测模型?
- xamarin.forms - 使用 Xamarin.Forms Shell 将选项卡移动到底部
- encryption - 如何使用 RC4 解密 HEX 缓冲区?
- firebase - 运行 Firestore 安全规则时出现空值错误