请考虑以下内容:
SELECT TOP 1 discountAmount,
SUM(amount)
FROM customerTransactions
WHERE customerTrasactions.id = 123
ORDER BY discountAmount DESC
该查询绝对无法使用,因为我没有按DiscountAmount进行分组,但我想要的只是有关客户的总金额加上他们的最大折扣金额。
是否有一种方法,而不必求助于子查询或交叉应用?这只是我要优化的更大查询的一小部分,因此能够像这样在单个查询中获得这两个数据点将是最佳选择。
很遗憾,我只能使用SQL Server 2008
答案 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
之前求值的。