2

私は解決策を見つけようとしていましたが、それが単純に見えても成功しませんでした。だからこれは初心者の質問かもしれません...

3列のテーブルuserscoresがあります。

date          userid   points
2012-05-01    1        23
2012-06-01    1        34
2012-07-01    1        44
2012-05-01    2        78
2012-06-01    2        94
2012-07-01    2        99
2012-06-01    3         2
2012-07-01    3         9

次に、ユーザーごとに2012-05-01と2012-06-01のポイントのを取得する必要があります。

存在しないユーザーのポイント(ユーザーID 3の例)は、2-0として計算する必要があります...このために、COALESCE(qa_points、0)を使用できると思います。

計算のために2つのサブクエリを組み合わせる方法について読みましたが、実装に失敗しました。

助けていただければ幸いです。

PS:これは機能していません:

SELECT t1.userid, t1.points - t2.points AS mpoints FROM (
        SELECT userid,points FROM `userscores` 
        WHERE YEAR(date) = YEAR('2012-05-01') 
        AND MONTH(date) = MONTH('2012-05-01') ) 
        AS t1
    JOIN (
        SELECT userid,points FROM `userscores` 
        WHERE YEAR(date) = YEAR('2012-04-01') 
        AND MONTH(date) = MONTH('2012-04-01') ) 
        AS t2
    ORDER BY mpoints DESC, t1.userid DESC;
4

2 に答える 2

2

あなたのクエリは次のようになると思います:

    SELECT ul.userid, 
           ul.points - COALESCE(uf.points, 0) AS points_difference
      FROM userscores ul 
 LEFT JOIN 
           (SELECT userid, points FROM userscores WHERE `date` = '2012-05-01') AS uf
        ON uf.userid = ul.userid
     WHERE ul.date = '2012-06-01'

LEFT JOIN が使用されるのは、結合するレコードがない可能性があるとのことでしたthis user/former date

于 2012-06-24T15:35:43.610 に答える
0

次のクエリを使用します。

SELECT t1.userid, 
( t1.points - (case t2.date when '2012-05-01' then t2.points else 0 end)) 
AS mpoints FROM userscores as t1
INNER JOIN  userscores as t2
ON t1.date = '2012-06-01' AND t1.userid=t2.userid
于 2012-06-24T15:49:51.170 に答える