42921


COUNT(*) が何を意味しているのかわからないです。SQLの勉強をしています。

[code]

    SELECT age, COUNT(*)
    FROM users
    GROUP BY age;
    
[/code]

というコードがありました。全てのユーザーを年齢ごとにグループ化し年齢と年齢ごとの人数をusersテーブルから取得してくるという内容なのですが、なぜCOUNT(*)の（）の中は＊が指定されているのでしょうか？＊は全てという意味で、この場合だとCOUNT(age)
になるのかなと。


CC BY-SA 3.0
2018-04-04T02:25:48.497
42915
2018-04-04T03:54:58.810
27691
question
sql
COUNT(*)　が何を意味しているのかわからない


Oracleでは`COUNT(*)`と`COUNT(age)`の結果は異なります。  
ageにnullが入っていると`COUNT(age)`では件数にカウントされません。  
グループ化していても同様で、ageがnullのグループのみ0件となります。  
`COUNT(*)`ではageにnullが入っていてもレコードの件数をカウントします。

`COUNT(*)`ではレコードの内容を取得するため、`COUNT('X')`や`SUM(1)`を使った方が高速化できると教わったことがあります。(10年ほど前に聞いたノウハウなので現在も適用されるのかは不明ですが…)


CC BY-SA 3.0
2018-04-04T02:59:13.587
42920
2018-04-04T02:59:13.587
9820
42915
answer


> COUNT(*) が何を意味しているのかわからないです。

「*」はテーブルの全カラムを表すので、以下のようなイメージで考えるといいと思います。

[![画像の説明をここに入力](https://i.stack.imgur.com/dNC32.png)](https://i.stack.imgur.com/dNC32.png)

基本的に、グループ化した場合はどちらも同じ行数になりますが、@payaneco さんが仰るように、nullの扱いに気をつける必要があります。


CC BY-SA 3.0
2018-04-04T03:20:12.820
42921
2018-04-04T03:54:58.810
2018-04-04T03:54:58.810
21092
21092
42915
answer