2016-03-28 210 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 
相關問題