SQL select 列的 SUM 最大的行(GROUP BY 中有两个字段)
SQL select row where SUM of a column is greatest (with two fields in GROUP BY)
这是我的基本查询(SQL 服务器):
SELECT projectID, businessID, sum(number) AS summ
FROM table
GROUP BY projectID, businessID
ORDER BY projectID, sum(number) DESC
生成 table 如下所示:
Project ID Business ID Summ
1 1 63
1 2 32
1 3 6
2 3 45
2 1 44
2 2 3
我想获取每个项目 ID 的 Summ 列最大的项目 ID 和业务 ID。因此,在给出的示例中,第 1 行和第 4 行。我如何调整原始查询来执行此操作?
您可以使用解析函数:
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;
希望对您有所帮助。
如果您可能有领带并且想要 return 两行,您应该使用:
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
您需要第二个聚合或分析函数。这是使用第二个聚合来完成此操作的方法:
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 服务器。
这是我的基本查询(SQL 服务器):
SELECT projectID, businessID, sum(number) AS summ
FROM table
GROUP BY projectID, businessID
ORDER BY projectID, sum(number) DESC
生成 table 如下所示:
Project ID Business ID Summ
1 1 63
1 2 32
1 3 6
2 3 45
2 1 44
2 2 3
我想获取每个项目 ID 的 Summ 列最大的项目 ID 和业务 ID。因此,在给出的示例中,第 1 行和第 4 行。我如何调整原始查询来执行此操作?
您可以使用解析函数:
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;
希望对您有所帮助。
如果您可能有领带并且想要 return 两行,您应该使用:
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
您需要第二个聚合或分析函数。这是使用第二个聚合来完成此操作的方法:
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 服务器。