![](/img/trans.png)
[英]SQL Group BY SUM one column and select of first row of grouped items
[英]SQL select row where SUM of a column is greatest (with two fields in GROUP BY)
這是我的基本查詢(SQL Server):
SELECT projectID, businessID, sum(number) AS summ
FROM table
GROUP BY projectID, businessID
ORDER BY projectID, sum(number) DESC
它產生一個像這樣的表:
Project ID Business ID Summ
1 1 63
1 2 32
1 3 6
2 3 45
2 1 44
2 2 3
我想獲取項目ID和業務ID,其中Summ列對於每個項目ID最大。 所以給出的例子中的第1行和第4行。 我如何調整原始查詢來執行此操作?
如果您可能有關聯並希望返回兩行,則應使用:
select * from
(select projectID, businessID
, sum(number) as Tot
, max(sum(number)) over (partition by projectID) as MSum
from Table
group by projectID, businessID)
a
where a.tot = a.Msum
您可以使用分析函數:
SELECT projectID,
businessID,
summ
FROM(SELECT projectID,
businessID,
SUM(number) AS summ,
ROW_NUMBER() OVER (PARTITION BY projectID
ORDER BY SUM(number) DESC) AS rn
FROM table
GROUP
BY projectID,
businessID
) t
WHERE rn = 1
ORDER
BY projectID;
希望有所幫助。
您需要第二個聚合或分析功能。 這是使用第二個聚合執行此操作的方法:
WITH sums as (
SELECT projectID, businessID, sum(number) AS summ
FROM table
GROUP BY projectID, businessID
)
SELECT sums.projectId, sums.businessId, sums.summ
FROM
(
SELECT projectID, MAX(summ) as ms
FROM sums
GROUP BY projectID
) ms
JOIN sums
ON sums.projectId = ms.projectId AND sums.summ = ms.ms
您需要在不支持分析功能的系統上使用此方法,幸運的是,它不包括SQL Server。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.