0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Oracle】名簿から「○行」始まりの人は何人いるか抽出するSQL文

Last updated at Posted at 2023-03-23

次のように、名簿を表すNAMELISTテーブルがあり、苗字(LAST_NAME)があ行始まりは何人か、か行始まりは何人か・・・、わ行始まりは何人か知りたいとする。使用DBはOracle。
image.png

これを実現したSQLは以下。
Oracleでは、正規表現はREGEXP_LIKE関数を使う。
先頭が「あいうえお」は「あ行」として扱い、先頭が「かきくけこ」は、「か行」として扱い・・・を列挙していく。その後、COUNTするのにGROUP BYする。

what_column_count.sql
SELECT CASE
WHEN REGEXP_LIKE(LAST_NAME, '^[あいうえお]') THEN 'あ行'
WHEN REGEXP_LIKE(LAST_NAME, '^[かきくけこ]') THEN 'か行'
WHEN REGEXP_LIKE(LAST_NAME, '^[さしすせそ]') THEN 'さ行'
WHEN REGEXP_LIKE(LAST_NAME, '^[たちつてと]') THEN 'た行'
WHEN REGEXP_LIKE(LAST_NAME, '^[なにぬねの]') THEN 'な行'
WHEN REGEXP_LIKE(LAST_NAME, '^[はひふへほ]') THEN 'は行'
WHEN REGEXP_LIKE(LAST_NAME, '^[まみむめも]') THEN 'ま行'
WHEN REGEXP_LIKE(LAST_NAME, '^[やゆよ]') THEN 'や行'
WHEN REGEXP_LIKE(LAST_NAME, '^[らりるれろ]') THEN 'ら行'
WHEN REGEXP_LIKE(LAST_NAME, '^[わ]') THEN 'わ行'
ELSE 'etc.' END AS WHAT_COLUMN,
COUNT(*)
FROM NAMELIST
GROUP BY CASE
WHEN REGEXP_LIKE(LAST_NAME, '^[あいうえお]') THEN 'あ行'
WHEN REGEXP_LIKE(LAST_NAME, '^[かきくけこ]') THEN 'か行'
WHEN REGEXP_LIKE(LAST_NAME, '^[さしすせそ]') THEN 'さ行'
WHEN REGEXP_LIKE(LAST_NAME, '^[たちつてと]') THEN 'た行'
WHEN REGEXP_LIKE(LAST_NAME, '^[なにぬねの]') THEN 'な行'
WHEN REGEXP_LIKE(LAST_NAME, '^[はひふへほ]') THEN 'は行'
WHEN REGEXP_LIKE(LAST_NAME, '^[まみむめも]') THEN 'ま行'
WHEN REGEXP_LIKE(LAST_NAME, '^[やゆよ]') THEN 'や行'
WHEN REGEXP_LIKE(LAST_NAME, '^[らりるれろ]') THEN 'ら行'
WHEN REGEXP_LIKE(LAST_NAME, '^[わ]') THEN 'わ行'
ELSE 'etc.' END
ORDER BY WHAT_COLUMN;

実行結果は以下。
image.png

正規表現とCASEを上手く使えば、上記のようなことが実現できるということで備忘録として残しておいた。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?