2016-03-28 6 views
1

ユーザーが特定の重みのリソースを地域内に配置する方法に関する情報を含む「リソース」表があります。MAX SUMの値が別の列でグループ化された複数の行を選択します。

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でいくつかのネストされたクエリを試してみましたが、私は本当にこれを計算するための適切な方法を見つけることができませんでした。 私は多くの似たような質問を見つけましたが、この正確な問題を解決することはできません。 助けてください?前もって感謝します!

編集:私は「部分的BYダブルORDERと(すなわち「territory_id BY GROUP、USER_ID」)BYダブルGROUPは私の問題を解決するが、それは私がドンの情報も表示されていること、今分かった

(最高のユーザーだけでなく、少なくとも1つのリソースを配置した各ユーザー)。

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

あなたは各カップル(territory_iduser_id)ためSUM(weight)を決定するために、最初のクエリを実行し、最大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 
関連する問題