テーブルから必要な項目の数を数えるときにcount()を使います。
しかし、どのように使うのかわからなかったので調べてみました。
動作環境
SQL FIDDLEでOracle11g R2、MySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。
COUNT()について
構文
COUNT (* | [DISTINCT] ALL | column_name)
構文の説明
名称 | 説明 |
---|---|
column_name | カラムの名前 |
* | (*)アスタリスクは全ての行 |
DISTINCT | オプションで重複除去する 省略可 |
ALL | オプションでデフォルト値なので特に気にする必要なし (Distinctを書かない場合ALLが実行される) |
書き方例
全ての行数をカウント
COUNT(*)
全ての行数をカウントします。
数えたい要素を指定してカウント
count(列名)
例えばnameの列をカウントする時は以下のようになります。
例 : count(name)
この場合nameの列の値をカウントしますが、nullはカウントしません。
count(ALL name)と書いても同じ動きになします。
※ count(name)と同じ=省略可能
重複を除去してカウント
count(Distinct 列名)
重複する項目を除いてカウントします。
実際の書き方例
テーブルを準備
以下のテーブルを使用します。
item | itemnm |
---|---|
(null) | あいう |
1 | かきく |
3 | かきく |
上記テーブル作成コードです。
— CREATE TABLEでテーブル作成
create table test2(
item integer
,itemNm varchar(20)
);
— 値をインサート
insert INTO test2 values(null, ‘あいう’), (1, ‘かきく’), (3, ‘かきく’);
COUNTを使ったSELECT文の例
全ての行数をカウント
— 行を集計
select count(*) from test2;
■ 結果
count 3
全ての行数からitemがNULLのものをカウント
— Nullを集計
select count(*) from test2 where item IS NULL
■ 結果
count 1
全ての行数からitemが1のものをカウント
— itemが1のものを集計
select count(*) from test2 where item = 1
■ 結果
count 1
itemの項目をカウント
SELECT COUNT( item ) from test2;
■ 結果
count 2
※ 項目数が2つあるから
itemNmから重複する項目を除いてカウント
— 重複を除く
SELECT COUNT( DISTINCT itemNm) from test2;
■ 結果
count 2
参考サイト:https://w3resource.com/PostgreSQL/postgresql-count-function.php
count()以外と併用して使う場合
count()単体で使う分には問題ないですが、他のカラムと使う場合Group Byでグループ化する必要があります。グループ化しないとcountする項目が1行ずつになってしまい意味がないですもんね。
SELECT
itemNm,
Count(itemNm)
FROM
test2
Group by
itemNm
この場合SELECTで選んだ項目をGroup化する必要があります。
■ 結果
itemnm | count |
---|---|
かきく | 2 |
あいう | 1 |
余談
余談ですがCOUNT()を書いていてMySQLでなぜかエラーになってしまうことがあったのですが、COUNT()のCOUNTと()の間にスペースが入っていてエラーになってしまいました。うっかりスペースを入れないように気をつけようと思います。