2016-09-22 4 views
-1

私はScoreboardのテーブルを持っています。MySQLでは、各ユーザーの2行の合計でどのように注文するのですか

userID|userName|weekID|pickID|Score 
-------------------------------------------- 
1  |Bob  | 1 | Den | 10 
1  |Bob  | 2 | Clev | 20 
2  |Adam | 1 | Car | 12 
2  |Adam | 2 | Den | 30 

私は私の望ましい結果がこれだろう 週間の全ての合計でテーブルをソートしたいと思います。週1、週2 のための彼のスコアの合計が最も高いので

userID|userName|weekID|pickID|Score 
-------------------------------------------- 
2  |Adam | 1 | Car | 12 
2  |Adam | 2 | Den | 30 
1  |Bob  | 1 | Den | 10 
1  |Bob  | 2 | Clev | 20 

アダムスエントリが一番上にあります。このようにテーブル全体をソートする必要があるので、ループ上でHTMLを吐き出している間、行は順番にソートされます。

+2

したがって、私たちは修正案を提示する予定です – RiggsFolly

答えて

0

"GROUP BY"はキーです。

+1

このクエリは十分ではありません – Mojtaba

+0

これはあなたに正しい順序のユーザーを取得しますが、それはOPの例で2行を与えるので、これはちょうど出発です。 – jeroen

+0

@jeroen、質問の希望の結果を見てください – Mojtaba

2

ユーザーあたりの集計スコアを取得し、その合計を降順でソートし、オプションで1つ以上の他の列もソートする必要があります。私はweekIDが良いセカンダリソートだと思います。

あなたは正しくORDERにできるようにするためにuserIDGROUP BYメインテーブルのuserIDweekID、およびSUMJOIN EDテーブルのScore列に基づいてテーブルをそれ自体にJOINすることができます。

SELECT s.userid, s.username, s.weekid, s.pickid, s.score, SUM(a.score) totalscore 
FROM scoreboard s 
INNER JOIN scoreboard a ON a.userid = s.userid 
GROUP BY s.userid, s.weekid 
ORDER BY totalscore DESC, s.weekid; 

あなたがデータに合計を必要としない場合は、あなたがORDER BY句で直接SUMを置くことができます返さ。

SELECT s.userid, s.username, s.weekid, s.pickid, s.score 
FROM scoreboard s 
INNER JOIN scoreboard a ON a.userid = s.userid 
GROUP BY s.userid, s.weekid 
ORDER BY SUM(a.score) DESC, s.weekid; 

あなたのデータはこれよりも正規化されていると仮定して調整してください。

また、1つのシーズン以上の運用を計画していることも想像してください。最終的にはそれをフィルタリングする必要があります。

+1

これは正解とマークする必要があります。 2番目のクエリは、OPが求めるものです=) – nimmneun

関連する問題