「INSERT INTO 〜 SELECT 〜」のSELECT結果を「ON DUPLICATE KEY UPDATE 〜」で使う

「ON DUPLICATE KEY UPDATE」という構文がMySQL独自のものと知ったときは軽くショックを受けました*1

まあ、そんなことはどうでもいいんです。
通常、「INSERT INTO 〜 SELECT 〜」ってGROUP節を使って集計したものをどっかのテーブルに入れるとかっていう時に使うと思うんですが、その集計結果が既にあるときにUPDATEする、ということがしたいですよね。
例えば次のようなクエリで。

INSERT INTO total (id,count)
SELECT id, count FROM daily GROUP BY date

私は最初次のようにやってみましたが、これはエラーになります。

INSERT INTO total (id,count)
(SELECT id, count FROM daily GROUP BY date) t
ON DUPLICATE KEY UPDATE count = t.count

後から気づいたんですが、そもそもサブクエリ全体に派生テーブル名をつけてどうすんだって話ですね。
正しくはこうです。

INSERT INTO total (id,count)
SELECT id, count FROM (SELECT id, count FROM daily GROUP BY date) t
ON DUPLICATE KEY UPDATE count = t.count

*1:oracleにはMERGEっていう似たものがあるらしいですが詳細は知りません。あとポスグレはストアドプロシージャ使うらしいです