(Oracle) COUNT でレコード件数を取得する方法

(Oracle) COUNT でレコード件数を取得する方法

 

本記事では、、Oracleの「COUNT」について使い方を紹介していく。

 

COUNT:レコード件数を取得する

Oracleで「COUNT」を使用すると、レコード件数を取得することが可能だ。

GROUP BYやDISTINCTなどと合わせて使うことによって、
グループごとに件数を取得したりすることも可能であり、使用頻度は割と高い関数だ。

 

COUNTの使い方

COUNTの使い方は、以下のようになっている。

--テーブル1の件数を取得する
SELECT
COUNT(カウント列名)
FROM テーブル;

 

COUNTでレコード数を取得するサンプル

以下はCOUNTを使って、レコード数を取得するサンプルだ

--テーブル1の件数を取得する
SELECT
COUNT(*) AS 全列数,
COUNT(電話番号) AS 電話番号列数
FROM テーブル1;


--テーブル1
+------+--------------+
| 氏名 |       電話番号 |
+------+--------------+
| 太郎 | 080-1111-2222 |
| 次郎 | null          |
| 三郎 | 080-1111-3333 |
| 四郎 | 080-1111-4444 |
| 五郎 | null          |
+------+--------------+
--実行結果
+-------+------------+
| 全列数 | 電話番号列数 |
+------+-------------+
|     5|            3|
+------+-------------+

 

使い方は単純で、COUNT()の引数にレコード数取得用のキーを指定するだけだが、
「*」を指定するか「列名」を指定するかで若干挙動が変わってくるので注意が必要だ。

 

「*」を指定 → テーブルの列数を取得

「列名」を指定 → nullを除いた指定列名の列数を取得

 

上記の例でいくと、
「*」を指定した場合はテーブル全体の5件が取得され、
「電話番号」を指定した場合はnullを除いた3件が取得されているのがわかる。

 




 

COUNT(*)よりCOUNT(列名)の方がパフォーマンスが高い

パフォーマンスを考えると、使える場面ではなるべく
COUNT(*)ではなく、COUNT(列名)を使用した方がパフォーマンスが高い

(nullが存在しないなどの理由で)結果数が変わらないからとCOUNT(*)を乱用すると思わぬパフォーマンスの低下につながることがあるので頭の片隅に入れておこう。

 

グループ毎にCOUNTで件数を取得する

COUNTは、GROUP BYやDISTINCTなどと合わせて使うことによって、
グループごとに件数を取得したりすることも可能だ。

 

GROUP BYでグループ化する例

まずはGROUP BYでグループ化してからCOUNTする例を紹介する。

--テーブル1の件数を取得する
SELECT
動物 AS 動物名
COUNT(動物) AS 列数
FROM テーブル1
GROUP BY 動物名;


--テーブル1
+------+
| 動物 |
+------+
|  かめ | 
|  いぬ | 
|  うし | 
|  うし | 
|  たぬき | 
|  たぬき | 
|  たぬき | 
+------+
--実行結果
+-------+-----+
| 動物名 | 列数 |
+------+------+
|  かめ |    1 |
|  いぬ |    1 | 
|  うし |    2 |
| たぬき |   3 |
+------+------+

GROUP BYを使って、動物の種類ごとにグループ化した結果の件数を集計した。
それぞれの動物の合計数がCOUNTで取得できているのがわかるだろう。

 

DISTINCTでグループ化する例

最後にDISTINCTでグループ化してCOUNTする例を紹介する。

--テーブル1の件数を取得する
SELECT
COUNT(distinct 動物) AS 動物数
FROM テーブル1;


--テーブル1
+------+
| 動物 |
+------+
|  かめ | 
|  いぬ | 
|  うし | 
|  うし | 
|  たぬき | 
|  たぬき | 
|  たぬき | 
+------+
--実行結果
+------+
| 動物数 |
+------+
| 4     | 
+------+

DISTINCTを使って、動物の種類の件数を集計した。
動物の種類の合計数がCOUNTで取得できているのがわかるだろう。

(グループ化と言っていいのかグレーゾーンだが、、広い意味でまとめてるのでよしとする)

 

関連記事

(Oracle) DECODEで条件を分ける【CASEとの違いも解説】
(Oracle) CASEで条件を分ける【DECODEとの違いも解説】

 

https://www.shift-the-oracle.com/sql/aggregate-functions/count.html

https://docs.oracle.com/cd/E82638_01/sqlrf/COUNT.html

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。