想象一下,我有一张表格显示Acme Widgets的销售情况,以及它们的销售地点.按国家/地区生成报告分组销售相当容易.找到前10名相当容易.但我想要的是显示前10名,然后最后一行说其他.例如,
Ctry | Sales
=============
GB | 100
US | 80
ES | 60
...
IT | 10
Other | 50
Run Code Online (Sandbox Code Playgroud)
我一直在寻找年龄,但似乎找不到任何帮助,超过标准前10名.
TIA
我在这里尝试了其他一些解决方案,但是它们似乎要么稍微关闭,要么排序不是很正确.
我对Microsoft SQL Server解决方案的尝试似乎正常工作:
SELECT Ctry, Sales FROM
(
SELECT TOP 2
Ctry,
SUM(Sales) AS Sales
FROM
Table1
GROUP BY
Ctry
ORDER BY
Sales DESC
) AS Q1
UNION ALL
SELECT
'Other' AS Ctry,
SUM(Sales) AS Sales
FROM
Table1
WHERE
Ctry NOT IN (SELECT TOP 2
Ctry
FROM
Table1
GROUP BY
Ctry
ORDER BY
SUM(Sales) DESC)
Run Code Online (Sandbox Code Playgroud)
请注意,在我的示例中,我只使用TOP 2而不是TOP 10.这仅仅是因为我的测试数据更加有限.您可以轻松地将2替换为您自己的数据中的10.
这是创建表的SQL脚本:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table1](
[Ctry] [varchar](50) NOT NULL,
[Sales] [float] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
Run Code Online (Sandbox Code Playgroud)
我的数据看起来像这样:
GB 10
GB 21.2
GB 34
GB 16.75
US 10
US 11
US 56.43
FR 18.54
FR 98.58
WE 44.33
WE 11.54
WE 89.21
KR 10
PO 10
DE 10
Run Code Online (Sandbox Code Playgroud)
请注意,查询结果由Sales值聚合而非字母国家/地区代码正确排序,并且"其他"类别始终为最后一个,即使它的Sales值聚合通常会将其推送到列表顶部.
我不是说这是最好的(读取:最优)解决方案,但是,对于我提供的数据集,它似乎运行得很好.
| 归档时间: |
|
| 查看次数: |
11151 次 |
| 最近记录: |