MySQLで特定の文字で始まるレコードをカウントする方法|SUBSTRINGとGROUP BYの活用例
MySQLでは、SUBSTRING()関数とGROUP BY句を組み合わせることで、「特定の文字で始まるレコード」を簡単にカウントできます。この記事では、サンプルテーブルを作成し、名前の先頭2文字ごとにレコード数を集計する手順をわかりやすく解説します。
テーブルの作成
まず、テーブルを作成します。
mysql> create table DemoTable775 ( FirstName varchar(100) ); Query OK, 0 rows affected (0.78 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable775 values('Adam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable775 values('Carol');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable775 values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable775 values('Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable775 values('Adan');
Query OK, 1 row affected (0.15 sec)
登録済みレコードの確認
SELECT文でテーブル内の全レコードを表示してみましょう。
mysql> select *from DemoTable775;
このクエリを実行すると、次のような出力が得られます。
+-----------+ | FirstName | +-----------+ | Adam | | Carol | | John | | Sam | | Adan | +-----------+ 5 rows in set (0.00 sec)
特定の文字で始まるレコードをカウントするクエリ
ここでは、SUBSTRING(FirstName,1,2)で名前の先頭2文字を抽出し、それをGROUP BYでグループ化することで、同じ先頭文字を持つレコードの件数をCOUNT(*)で集計しています。
mysql> select count(*),substring(FirstName,1,2) from DemoTable775 group by substring(FirstName,1,2);
実行結果は以下のとおりです。
+----------+--------------------------+ | count(*) | substring(FirstName,1,2) | +----------+--------------------------+ | 2 | Ad | | 1 | Ca | | 1 | Jo | | 1 | Sa | +----------+--------------------------+ 4 rows in set (0.00 sec)
この結果から、「Ad」で始まるレコードが2件(Adam・Adan)、「Ca」「Jo」「Sa」で始まるレコードがそれぞれ1件存在することがひと目でわかります。
補足:LIKE演算子を使う方法
「特定の文字列で始まるレコードの総数だけを知りたい」という場合は、WHERE句とLIKE演算子を使うのがよりシンプルです。
mysql> select count(*) from DemoTable775 where FirstName like 'Ad%';
このクエリでは、先頭が「Ad」で始まるレコードの件数である「2」が返されます。用途に応じて、GROUP BYでのグループ別集計とLIKEによる絞り込み検査を使い分けるとよいでしょう。
-
【MySQL】STR_TO_DATEを使って異なる形式の日付から特定日以降のレコードを取得する方法
はじめにデータベースの運用では、日付が「21/11/2019」のような文字列形式(DD/MM/YYYY)で保存されているケースによく出会います。このような場合、UNIX_TIMESTAMP() の代わりに STR_TO_DATE() 関数を使うことで、文字列の日付を正しく変換し、特定の日付以降のレコードを簡単に抽出できます。本記事では、実際のSQL例を使いながら、その手順をわかりやすく解説します。1. サンプルテーブルの作成まず、日付をvarchar型で保持するテーブルを作成します。mysql> create table DemoTable1808 ( Admission
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)