我有一张表格,其中我有客户提供的付款详情。列如下:
ID, ClientID, Amount
现在我想通过客户端ID找到5个最大金额组合。
我找到DENSE_RANK()
但它不适合我,因为我想找到金额。
感谢。
答案 0 :(得分:0)
;WITH totalSum
AS
(
SELECT ClientID, SUM(Amount) totalAmount
FROM tableName
GROUP BY ClientID
)
SELECT ClientID, totalAmount
FROM
(
SELECT ClientID, totalAmount,
DENSE_RANK() OVER (ORDER BY totalAmount DESC) rn
FROM totalSum
) s
WHERE rn <= 5
答案 1 :(得分:0)
SELECT
ID,
ClientID,
Amount
FROM
PaymentDetails
GROUP BY
ID
HAVING
Amount = SUM(Amount)
答案 2 :(得分:0)
请尝试:
SELECT
ClientID,
SUM(Amount) Amount
FROM(
SELECT ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY Amount DESC) DR,
ClientID,
Amount
FROM YourTable
)x WHERE x.DR<=5
GROUP BY ClientID
ORDER BY ClientID
答案 3 :(得分:0)
这对你有用吗? (不确定我理解你的问题)
如果你想要TOP 5总数,就是这样。
用于查找每个客户SUM()
金额的TOP 5
的查询是不同的。
;WITH OrderingCTE AS
(
SELECT ID
,ClientID
,Amount = SUM(Amount)
,rNum = ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY SUM(Amount) DESC)
FROM MyTable
GROUP BY ID
,ClientID
)
SELECT *
FROM OrderingCTE
WHERE rNum <=5