用另一列分组值的最大值选择多个行
问题描述:
我有一个“资源”表,其中包含有关特定权重的资源如何放置在用户区域内的信息。用另一列分组值的最大值选择多个行
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
我已经试了几个嵌套查询与SUM
,MAX
,GROUP BY
但我还真没发现计算这个的正确方法。 我发现了很多类似的问题,但没有解决这个确切的问题。 有什么帮助吗?提前致谢!
编辑:
我找到了现在这双GROUP BY双ORDER 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;
答
可以运行第一查询,以确定SUM(weight)
为每对夫妇(territory_id
,user_id
),然后对结果集检索对应到最大SUMM值的行运行第二个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