Select 多行,其中一个值的 MAX SUM 按另一列分组

Select multiple rows with the MAX SUM of a value grouped by another column

我有一个 "resources" table,其中包含有关用户如何将特定权重的资源放置在区域内的信息。

territory_id        user_id     weight 
1                       1           1
1                       1           4
1                       1           2
1                       2           2
2                       3           2
2                       2           3 
2                       2           3
3                       1           1
4                       1           1
4                       1           1
4                       2           2
4                       3           3
4                       3           1
4                       3           2
5                       3           2
5                       3           3
5                       2           1
4                       3           1

我想为每个现有领土计算哪个用户拥有最高的资源总权重(以及这个值是多少)。 所以这应该是之前数据的预期结果:

territory_id        best_user_id        best_user_total_weight_of_resources 
1                       1                       7 
2                       2                       6
3                       1                       1
4                       3                       6
5                       3                       5

我已经用 SUMMAXGROUP BY 尝试了几个嵌套查询,但我真的没有找到正确的计算方法。 我发现了很多类似的问题,但没有解决这个确切的问题。 有什么帮助吗?提前致谢!

编辑:

我现在发现双 GROUP BY(即 "GROUP BY territory_id, user_id")和双 ORDER BY 部分解决了我的问题,但它也显示了我不想要的信息(不仅是最佳用户,但每个用户至少放置了一个资源)。

SELECT territory_id, user_id AS best_user_id, SUM( weight ) AS best_user_total_weight
FROM resources
GROUP BY territory_id, user_id
ORDER BY territory_id ASC, best_user_total_weight DESC;

您可以运行第一个查询来确定每对夫妇(territory_iduser_id)的SUM(weight),然后运行第二个SELECT 查询该结果集以检索对应于最大总和值的行:

SELECT territory_id, user_id, MAX(summ) 
FROM (
  SELECT territory_id, user_id, SUM(weight) AS summ 
  FROM resources
  GROUP BY territory_id, user_id
) AS t1 
GROUP BY territory_id