SELECT の集計結果でテーブルを UPDATE する SQL 文

2008年 4月 15日 00:53

頻繁に使うのですが、結構いつもど忘れしてしまうので、メモっておきます。

例えば、次のような得点テーブル(score_data)とユーザ得点集計テーブル(user_total)があったとして、得点テーブルの集計結果で、ユーザ得点集計テーブルをアップデートする場合の SQL 文です。

SELECT * FROM score_data;
 test_date  | user_name | score
------------+-----------+-------
 2008-01-01 | A         |    85
 2008-01-01 | B         |    65
 2008-01-01 | C         |    90
 2008-02-01 | A         |    76
 2008-02-01 | B         |    58
 2008-02-01 | C         |    88
 2008-03-01 | A         |    92
 2008-03-01 | B         |    70
 2008-03-01 | C         |    86
(9 rows)

SELECT * FROM user_total;
 user_name | total_score
-----------+-------------
 A         |           0
 B         |           0
 C         |           0
(3 rows)

とりあえず、次のような感じで書くと

UPDATE user_total AS ut
    SET total_score = (
        SELECT SUM(sd.score) FROM score_data sd
            WHERE sd.user_name = ut.user_name
            GROUP BY sd.user_name
    );

こんな感じでユーザ毎に合計点をアップデートできます。

SELECT * FROM user_total;
 user_name | total_score
-----------+-------------
 A         |         253
 B         |         193
 C         |         264
(3 rows)

トラックバック URL


※言及リンクのないトラックバックは削除されます。
※書き込まれてから公開されるまで時間がかかる場合があります。

コメントをどうぞ

Spam protection by WP Captcha-Free

※書き込まれてから公開されるまで時間がかかる場合があります。