はじめに
SQLでcount()した列をさらにcount()したい場面に遭遇しました。
例を出しながら、備忘録としてまとめます。
内容
サンプルの表データは以下の通りです
営業メンバーに現在の担当の顧客を登録してもらうような状況で使う表を想定しています。
名前 | 所属 | 担当顧客 | 登録日 | ・・ | |
---|---|---|---|---|---|
1 | Aさん | 製造本部 | 会社a | 2023/〇〇/〇〇 | ・・ |
2 | Aさん | 製造本部 | 会社b | 2023/〇〇/〇〇 | ・・ |
3 | Bさん | 流通本部 | 会社c | 2023/〇〇/〇〇 | ・・ |
4 | Cさん | 金融本部 | 会社d | 2023/〇〇/〇〇 | ・・ |
6 | Aさん | 製造本部 | 会社f | 2023/〇〇/〇〇 | ・・ |
7 | Bさん | 流通本部 | 会社g | 2023/〇〇/〇〇 | ・・ |
・ | ・ | ・ | ・ | ・ | ・・ |
・ | ・ | ・ | ・ | ・ | ・・ |
それぞれのメンバーが何件の顧客を登録しているのか確認するSQL文は以下になります。
SELECT 名前, count(*) 件数
FROM サンプル表
group by 名前
得られる結果のイメージは以下です。
名前 | 件数 |
---|---|
Aさん | 5 |
Bさん | 3 |
Cさん | 2 |
・ | ・ |
さらに、〇件登録しているメンバーが何人なのか確認する場合のSQLは以下のようになります
select 件数,count(*) 件数の件数
from (
SELECT 名前, to_char(count(*)) 件数
FROM サンプル表
group by 名前
)
group by 件数
order by 件数 ASC
件数 | 件数の件数 |
---|---|
1 | 5 |
2 | 3 |
3 | 2 |
4 | 4 |
・ | ・ |
★ポイント★
・fromの後をサブクエリにしていること
・count()で取得した値をto_char()関数で文字列化していること
この結果から、1件の登録をしている営業メンバーが5名。2件登録している営業メンバーが3名。のように〇件登録している営業メンバーが何名ずついるのかを知ることが出来ます。
まとめ
count()で数えた列をさらにcount()する時には数値を文字列化することがポイントだという事が分かりました。今回のようなSQL文を書くのに多く時間がかかってしまったので、忘れないようにQiitaに記事を残しました。どこかのタイミングで参考になればと思います。