SQL生产前十名和其他

前端之家收集整理的这篇文章主要介绍了SQL生产前十名和其他前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下,我有一张表格,显示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值聚合通常会将其推送到列表顶部.

我不是说这是最好的(阅读:最优)解决方案,但是,对于我提供的数据集,它似乎运行得很好.

猜你在找的MsSQL相关文章