質問: COUNT(*) が何を意味しているのかわからないです。SQLの勉強をしています。 ``` SELECT age, COUNT(*) FROM users GROUP BY age; ``` というコードがありました。全てのユーザーを年齢ごとにグループ化し年齢と年齢ごとの人数をusersテーブルから取得してくるという内容なのですが、なぜCOUNT(*)の()の中は*が指定されているのでしょうか?*は全てという意味で、この場合だとCOUNT(age) になるのかなと。
回答: Oracleでは`COUNT(*)`と`COUNT(age)`の結果は異なります。 ageにnullが入っていると`COUNT(age)`では件数にカウントされません。 グループ化していても同様で、ageがnullのグループのみ0件となります。 `COUNT(*)`ではageにnullが入っていてもレコードの件数をカウントします。 `COUNT(*)`ではレコードの内容を取得するため、`COUNT('X')`や`SUM(1)`を使った方が高速化できると教わったことがあります。(10年ほど前に聞いたノウハウなので現在も適用されるのかは不明ですが...)