仕事で久しぶりに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回でできると思う。しかし、わかりにくい例文になってしまった。具体例をあげれないのは、慣れていない証拠だと思う。でも、自分が後から見るとすぐ分かるのでいいかなと妥協。