【发布时间】:2015-10-06 20:23:06
【问题描述】:
假设我们有以下 Fruits 表:
Fruit | Qty
-------------
Apple | 2
Apple | 5
Apple | 2
Orange | 3
Orange | 4
Orange | 0
Banana | 2
Banana | 5
Pear | 2
Mango | 1
Mango | 0
如果我想获得前 3 种水果,我会创建这样的查询:
SELECT TOP 3 Fruit, SUM(Qty) AS Total
FROM Fruits
GROUP BY Fruit
ORDER BY Total DESC
将返回:
Apple | 9
Orange | 7
Banana | 7
但是,如果我想包括不在前 3 名中的水果的总和,我将不得不使用 NOT IN 编写类似这样的内容来排除前 3 名水果:
SELECT 'OTHER' AS Fruit, SUM(Qty) AS Total
FROM Fruits
WHERE Fruit NOT IN (SELECT Fruit FROM (SELECT TOP 3 Fruit, SUM(Qty) AS Total FROM Fruits GROUP BY Fruit ORDER BY Total DESC) AS Test)
如果我想在单个查询中执行此操作,我想我可以使用UNION 组合这两个查询。我已经有了我的计划 B,但我想知道 SQL 是否有任何内置方法来聚合不属于可用于简化查询的最高值的行?
【问题讨论】:
标签: sql sql-server aggregate sql-server-2014