MySQLでGROUP_CONCATの最後の値を取得する方法
MySQLでGROUP_CONCATの結果から最後の値を取り出したい場合は、SUBSTRING_INDEX()関数を使うのが最も簡単な方法です。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。
1. テーブルの作成
まず、カンマ区切りの文字列を格納するテーブルを作成します。
mysql> create table DemoTable1525
-> (
-> ListOfSubjects text
-> );
Query OK, 0 rows affected (1.13 sec)
2. サンプルデータの挿入
INSERT文を使って、複数の科目がカンマ区切りで格納されたレコードを挿入します。
mysql> insert into DemoTable1525 values('MongoDB,C');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1525 values('Java,C++,MySQL');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1525 values('Python,C++,C,Java');
Query OK, 1 row affected (0.14 sec)3. テーブルの中身を確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1525;
実行すると、以下のような結果が出力されます。
+-------------------+
| ListOfSubjects |
+-------------------+
| MongoDB,C |
| Java,C++,MySQL |
| Python,C++,C,Java |
+-------------------+
3 rows in set (0.00 sec)
4. SUBSTRING_INDEX()で最後の値を取得する
ここからが本題です。SUBSTRING_INDEX()関数の第3引数に-1を指定すると、区切り文字(この場合はカンマ)より後ろ側の、つまり最後の値だけを抽出できます。
mysql> select substring_index(ListOfSubjects,',',-1) as LastValue from DemoTable1525;
実行結果は以下のとおりです。
+-----------+
| LastValue |
+-----------+
| C |
| MySQL |
| Java |
+-----------+
3 rows in set (0.00 sec)
補足:SUBSTRING_INDEX()の仕組み
SUBSTRING_INDEX(文字列, 区切り文字, 出現回数)という形式で使用します。出現回数に正の数を指定すると左から数えてN番目より前の部分を返し、負の数を指定すると右から数えてN番目より後ろの部分を返します。-1を指定すれば「最後の要素」を簡単に取得できるため、GROUP_CONCATやカンマ区切りのリスト処理で非常に便利です。
-
MySQLで最後の30行を取得する方法(ORDER BY DESCとLIMITの使い方)
MySQLでテーブルの最後の30行を取得したい場合は、ORDER BY DESC(降順ソート)とLIMIT 30を組み合わせるのが基本です。降順に並べ替えることで、最新(またはIDが大きい)レコードが先頭に来るため、先頭から30件を取り出すことで実質的に「最後の30行」が取得できます。基本構文SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 30;それでは、実際にサンプルテーブルを作成して動作を確認していきましょう。1. テーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable1567
-
【MySQL】MIN関数とMAX関数で最小値・最大値を取得する方法
MySQLで特定の列の最大値を取得するには MAX() 関数を、最小値を取得するには MIN() 関数を使用します。これらは最も基本的な集計関数の一つで、数値はもちろん、日付や文字列の大小比較にも利用できます。基本構文特定の列の最高値と最低値を求め、その値に該当するレコードを取得する場合の基本的な構文は以下の通りです。mysql> SELECT @min_val:=MIN(columnName),@max_val:=MAX(columnName) FROM tableName; mysql> SELECT * FROM tableName WHERE columnName=@min