ふりかえり

本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

本編に入ります!
count関数の基本構文

まずは、基本構文から見ていきましょう!
select count(カラム名) from テーブル名;

select,count,fromだね!

はい、そうです!
count 関数は、テーブルのデータ件数を数えるために使います。
たとえば、「申請データが何件あるか?」や「職員ごとの申請数を知りたい」など、データの数を集計するのに便利な関数です。
count(*) | すべての行 をカウントする(NULL も含める) |
count(カラム名) | 指定したカラムの NULL 以外 の行をカウント |
count(distinct カラム名) | 重複を除いた 件数をカウント |
count(*) group by ... | グループごとに 件数をカウント |
実務レベルの使用例を見ていこう!

実際に、SQLを使用してデータを確認していきましょう。
SQLに関しては以下を使用して解説していきます。
create table文、select文、insert文、update文、delete文、
drop table文、につきましては、過去にアップロードした
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーにSQLがあるから、そちらからでも
参照できます!
[事前準備]今回、実行するSQLの一覧
-- 申請管理情報テーブルの作成
create table 申請管理情報 (
STAFF_NO varchar2(10) not null, -- 職員番号 (Staff Number)
APPLI_NO varchar2(10) not null, -- 申請番号 (Application Number)
APPLI_DATE date, -- 申請年月日 (Application Date)
DEPARTMENT varchar2(10), -- 部署名(Department)
constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)
);
create table 申請内容の詳細 (
職員番号 varchar2(10) not null, -- 親テーブルの STAFF_NO に対応
申請番号 varchar2(10) not null, -- 親テーブルの APPLI_NO に対応
申請内容の詳細 varchar2(100), -- 申請の詳細内容を格納するカラム
constraint PK_申請内容の詳細 primary key (職員番号, 申請番号),
constraint FK_申請内容の詳細 foreign key (職員番号, 申請番号)
references 申請管理情報 (STAFF_NO, APPLI_NO)
);
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1001', 'A001', TO_DATE('2024-02-25', 'YYYY-MM-DD'),'営業');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1001', 'A002', TO_DATE('2024-02-26', 'YYYY-MM-DD'),'営業');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1002', 'A003', TO_DATE('2024-02-27', 'YYYY-MM-DD'),'開発');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1002', 'a003', TO_DATE('2024-01-27', 'YYYY-MM-DD'),'開発');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1003', 'A004', TO_DATE('2024-02-28', 'YYYY-MM-DD'),'営業');
insert into 申請内容の詳細 (職員番号, 申請番号, 申請内容の詳細)
values ('1001', 'A001', 'レギュラーとハイオク間違えたので、もう一回入れに行きたいです。');
insert into 申請内容の詳細 (職員番号, 申請番号, 申請内容の詳細)
values ('1001', 'A002', 'ガソリン高いから、もっと補助してほしい');
insert into 申請内容の詳細 (職員番号, 申請番号, 申請内容の詳細)
values ('1002', 'A003', 'ハイオク満タンにしちゃった');
insert into 申請内容の詳細 (職員番号, 申請番号, 申請内容の詳細)
values ('1002', 'a003', 'レギュラー満タンにしちゃった');
全体の申請件数を数える
select count(*) as 申請件数
from 申請管理情報;

count(*) は、NULL 値を含めたすべての行を数えます。
as 申請件数 は、カラム名をわかりやすくするためのエイリアスです。
部署ごとの申請件数を数える
select DEPARTMENT, count(*) as 申請件数
from 申請管理情報
group by DEPARTMENT;

group by DEPARTMENT で部署ごとにグループ化し、それぞれの申請件数を数えます。
職員ごとの申請件数を数える
select STAFF_NO, count(*) as 申請件数
from 申請管理情報
group by STAFF_NO;

STAFF_NO ごとに count(*) を使うことで、職員ごとの申請数を取得できます。
詳細情報のある申請件数を数える
select count(*) as 詳細付き申請件数
from 申請内容の詳細;

申請内容の詳細 テーブルにデータがある申請の件数を数えます。
申請内容がある職員ごとの件数
select 職員番号, count(*) as 詳細付き申請件数
from 申請内容の詳細
group by 職員番号;

1001 の職員は2件の申請内容を登録
1002 の職員も2件の申請内容を登録
1003 の職員は申請内容がないため、ここには表示されません。
まとめ
全体のデータ件数を数える → count(*)
特定のカラムが NULL でない件数を数える → count(カラム名)
重複を除いたデータ件数を数える → count(distinct カラム名)
グループごとに集計する → group by を組み合わせる

countについて解説しました。
count 関数を使えば、データの件数を簡単に集計できるので、しっかりと使いこなせるように練習してみてください!
次回もお楽しみに!










コメント