如何获取汇总查询的前1个值?

时间:2018-08-30 15:17:46

标签: sql sql-server-2008

请考虑以下内容:

SELECT TOP 1 discountAmount,
       SUM(amount)
FROM customerTransactions
WHERE customerTrasactions.id = 123
ORDER BY discountAmount DESC

该查询绝对无法使用,因为我没有按DiscountAmount进行分组,但我想要的只是有关客户的总金额加上他们的最大折扣金额。

是否有一种方法,而不必求助于子查询或交叉应用?这只是我要优化的更大查询的一小部分,因此能够像这样在单个查询中获得这两个数据点将是最佳选择。

很遗憾,我只能使用SQL Server 2008

1 个答案:

答案 0 :(得分:1)

您可以使用窗口功能:

{{ foo ?: 'no' }} is the same as {{ foo ? foo : 'no' }}
{{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }}

window函数提供所有将返回的行的总和。也就是说,窗口函数是在SELECT TOP (1) discountAmount, SUM(amount) OVER () as sum FROM customerTransactions WHERE customerTrasactions.id = 123 ORDER BY discountAmount DESC; ORDER BY之前求值的。