0

私は次の表を持っています:

スコア:

user_id | match_id | points
   1    |   110    |   4
   1    |   111    |   3
   1    |   112    |   3
   2    |   111    |   2

ユーザーは試合に賭け、試合の結果に応じてポイントが付与されます。賭けがどれだけ正確であったかに応じて、試合に対して0、2、3、または4ポイントが与えられます。

ここで、ユーザーをランク付けして、誰が1位、2位かなどを確認できるようにします。ランク付けの順序は、最初にtotal_pointsです。これらが、ユーザーが4ポイントを獲得した回数、次にユーザーが3ポイントを獲得した回数などの順序で等しい場合。

そのためには、次の表が必要です。

user_id |  total_points | #_of_fours | #_of_threes | #_of_twos
   1    |       10      |      1     |       2     |     0
   2    |        2      |      0     |       0     |     1

しかし、私はそれを取得するのに役立つ結合ステートメントを理解できません。

これは私が助けなしで得る限りです:

SELECT user_id、COUNT(points)AS#_of_foursFROMスコアWHEREポイント=4GROUP BY user_id

その結果

user_id | #_of_fours
    1   |      1
    2   |      0

これで、#_ of_threesとtwos、および合計ポイントに対してそれを実行し、すべてを結合する必要がありますが、その方法がわかりません。

ところで、MySQLを使用しています。

どんな助けでも本当に感謝されるでしょう。前もって感謝します

4

2 に答える 2

2
SELECT  user_id
,       sum(points) as total_points
,       sum(case when points = 4 then 1 end) AS #_of_fours 
,       sum(case when points = 3 then 1 end) AS #_of_threes
,       sum(case when points = 2 then 1 end) AS #_of_twos
FROM    scores
GROUP BY 
        user_id
于 2012-08-25T11:25:21.800 に答える
1

mysql 構文を使用SUMすると、一致する行を簡単にカウントできます。

SELECT 
  user_id, 
  SUM(points)   AS total_points,
  SUM(points=4) AS no_of_fours,
  SUM(points=3) AS no_of_threes,
  SUM(points=2) AS no_of_twos
FROM Table1
GROUP BY user_id;

ここでデモ。

于 2012-08-25T11:26:59.817 に答える