2011-06-21 8 views
1

私はカラムが(userid, score)のMYSQLテーブルを持っています。私はuseridをグループ化し、各useridのX最高得点の合計で列を取得したいと考えています。xの合計がmysqlの1行あたり最高です

など。

userid | score 
-------+------- 
01  | 1 
01  | 1 
01  | 2 
02  | 1 
02  | 2 
02  | 3 

へ::2つの最高のスコアの合計について

userid | scoresum 
-------+---------- 
01  | 3 
02  | 5 

しかし、私は、MySQLでこれを行う方法を見つけ出すように見えることはできません。

+0

最後の2つの最大の合計は、ur出力ですか? – K6t

+0

@ K6tええ、例では、私は2つの最高得点の合計を仮定します。 Qを編集してこれをより明確にする。 –

答えて

0
select SUM(MAX(col.name)) From table name Group by usedid 
+0

私は彼が望んだものとは思わない。 ** Xの最高得点の合計** –

+0

希望の出力を見てそれを上記の出力と比較すると、それはすべての得点の合計だけではないからです。 – Ruben

+0

k dude i ll check変更する.. – K6t

3
select 
    userid, 
(
select sum(highestscores) 
from (
    select * 
    from userscore us2 
    where us2.userid = us1.userid 
    order by score desc limit 5 
) 
) as scoresum 
from (select distinct userid from userscore) us1 

ので、基本的には5つの、最も高いスコアを取得するには、サブクエリを必要とします。それらを別のサブクエリと合計します。 1つの唯一のテーブルuserscoreからそれぞれの一意のuser_idごとにそのビジネス全体を実行します。

+0

私はこのクエリを動作させるように見えることはできません。 MySQLは 'where句'の 'Unknown column' us1.userid 'について苦情を申し立てます。 –

+0

は可変スコープのように見えますが、そこにネストされません。ごめんなさい。私は別の答えを提供します。 –

0

これはすべてのデータを提供する簡単なクエリです。 top_scoresを/、/で区切り、コードに追加するだけです。代替はストアドプロシージャですが、これは簡単だと思います。がんばろう。

select GROUP_CONCAT(score ORDER BY score DESC) top_scores 
from userscore 
group by userid 
関連する問題