2016-08-24 1 views
0

私はのようなクエリを記述するにはどうすればよい:MySQL:選択内のIN()ステートメント?これをどのように問い合わせますか?

SELECT userid, 
(IF field IN(1,2,3,900,658,4,5,6,9,10,11,12,13,10025,14,15,16,17,18,19) score = score +20, ELSE IF field IN(23,45,67,777,53,54) score = score + 40, 
    ELSE IF field IN(120,332,563,334,634,423,333) score = score + 60) AS score 
WHERE field IN(1,2,3,900,658,4,5,6,9,10,11,12,13,10025,14,15,16,17,18,19,23,45,67,777,53,54,120,332,563,334,634,423,333) 
GROUP BY userid ORDER BY score DESC 

私は与えられた数字のいずれかに設定フィールドを持つすべてのユーザーを検索しようとしています。特定の数字は異なるスコア(20ポイント、40ポイント、60ポイント)を持っているので、スコアを合計して各ユーザーIDの合計得点を求め、合計得点でランク付けする必要があります。あなたはこのを探しているかもしれない

+0

'()は' 'SELECT'クエリで使用するためにされていない場合に行うことができますプログラミングフロー制御ステートメント。それは関数です。 'if(something_that_returns_a_boolean、truevalue、falsevalue)'です。 –

答えて

1

SELECT userid, 
     sum(
      CASE 
       WHEN field IN (1,2,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19) THEN 20 
       WHEN field IN (23,45,67,53,54) THEN 40 
       ELSE 60 
      END) AS score 
FROM  mytable 
WHERE field IN (1,2,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,23,45,67,53,54,120, 
        332,563,334,634,423,333) 
GROUP BY userid 
ORDER BY score DESC 
+0

優秀、私はCase/Whenステートメントがまさに私が探していたものだと思います!ありがとう、親切にしています – peppy

0

あなたは表から目逃し、あなたはケース

select UserId, 
    case 
     when field < 20 then Score + 20 
     when field IN(23,45,67,53,54) then Score + 40 
     else score + 60 
     end as Score 
FROM mytable 
where field IN(1,2,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,23,45,67,53,54,120,332,563,334,634,423,333) 
group by UserId 
order by Score desc 
関連する問題