SQL生产前十名和其他
发布时间:2020-12-12 07:05:11 所属栏目:MsSql教程 来源:网络整理
导读:想象一下,我有一张表格,显示Acme Widgets的销售情况以及销售地点.按国家/地区生成报表分组销售相当容易.找到前10名相当容易.但我想要的是显示前10名,然后最后一行说其他.例如., Ctry | Sales=============GB | 100US | 80ES | 60...IT | 10Other | 50 我一直
想象一下,我有一张表格,显示Acme Widgets的销售情况以及销售地点.按国家/地区生成报表分组销售相当容易.找到前10名相当容易.但我想要的是显示前10名,然后最后一行说其他.例如.,Ctry | Sales ============= GB | 100 US | 80 ES | 60 ... IT | 10 Other | 50 我一直在寻找年龄,但似乎找不到任何帮助,超过标准前十名. 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) 请注意,在我的示例中,我只使用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 我的数据看起来像这样: 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 请注意,查询结果由Sales值聚合而非字母国家/地区代码正确排序,并且“其他”类别始终为最后一个,即使它的Sales值聚合通常会将其推送到列表顶部. 我不是说这是最好的(阅读:最优)解决方案,但是,对于我提供的数据集,它似乎运行得很好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |