2016-03-28 99 views
1

我有一个“资源”表,其中包含有关特定权重的资源如何放置在用户区域内的信息。用另一列分组值的最大值选择多个行

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双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; 

回答

0

可以运行第一查询,以确定SUM(weight)为每对夫妇(territory_iduser_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 
相关问题