覚えたつもりでもしばらく書かないと忘れる GROUP BY句

仕事で久しぶりにSQLを書いた。1つの表で、同じグループのものがいくつあるか調べるものだった。すぐに、GROUP BY句を使うことは思い浮かんだし、Aというグループのものがいくつあって、Bというグループがいくつあってとグループの数だけSELECT文を発行するよりも、GROUP BYの方が効率がいいことも分かったのだけど、肝心のクエリの書き方を忘れてしまっていた。
一応クエリは書けたものの自信がない。しかも、GROUP BYはソートするので間違えたクエリだった場合、負荷が大きいはずだとこわかったので、一応調べてから実行した。
idごとに数えたい場合は下記のようになる。

SELECT id, COUNT(id)
FROM 表名
GROUP BY id

今回の場合、レコード数は6万くらいあったのだけど、0.24秒とめちゃくちゃ速かった。驚いた。これを考えれば間違えてても大丈夫だったかなどど思ってしまう。


次はこの数を元に普通に他の表の、合計欄を更新したい。だからUPDATE文。実はこちらも自信なかった。書いてから確認すると間違っていなかった。こんなこと確認しているようではいけないと思う。
プログラムでUPDATE文をidの数だけ回すことになるのだけど、もっと効率のいい方法があった気がする。

UPDATE 表A a
SET a.数を入れるカラム = ( SELECT count(b.id)
                FROM 表B b
                WHERE a.id = b.id
                GROUP BY b.id
              )

これで1回でできると思う。しかし、わかりにくい例文になってしまった。具体例をあげれないのは、慣れていない証拠だと思う。でも、自分が後から見るとすぐ分かるのでいいかなと妥協。