簡體   English   中英

SQL選擇列的最大值的行(在GROUP BY中有兩個字段)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM