选择多行,其中MAX SUM的值按另一列分组

时间:2016-03-28 10:05:46

标签: mysql sum max nested-queries

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

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尝试了几个嵌套查询,但我确实找不到正确的计算方法。 我发现了很多类似的问题,但没有解决这个问题。 有帮助吗?提前谢谢!

修改

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

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;

1 个答案:

答案 0 :(得分:0)

您可以运行第一个查询来确定每对(SUM(weight)territory_id)的user_id,然后对该结果集运行第二次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