「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

SQLを使っていると、次のように複数行の値をカンマ区切りで1つにまとめたい場面があります。

🔹例:従業員テーブル

employee_idskill
1Java
1SQL
1Python
2HTML
2CSS

これを次のように集約したい👇

employee_idskills
1Java, SQL, Python
2HTML, CSS

こういった「行→1セルまとめ」が必要な時に便利なのが、

👉 LISTAGG
👉 STRING_AGG

の2つです。
データベースごとに対応状況が違うので、環境別にサンプル付きで解説します。


🔧 Oracle:LISTAGG

Oracleでは以下の構文を使用します。

📌ポイント

項目説明
LISTAGG(値, 区切り文字)行を連結する
WITHIN GROUP (ORDER BY ...)並び順を指定
GROUP BY行をまとめたい単位

❗注意:ORA-01489 対策

LISTAGGは文字列長上限でエラーになる場合があります。

Oracle 12c 以降なら ON OVERFLOW オプションで回避可👇


🧩 PostgreSQL / MySQL / SQL Server:STRING_AGG

最近のDBでは STRING_AGG が標準SQL 関数として使えます。


PostgreSQL


MySQL(8.0以降)

※ MySQL 8.0.21 までは GROUP_CONCAT() が一般的でした。

📌旧式例:


SQL Server


🔍LISTAGG / STRING_AGG 対応表

DB推奨関数ORDER BY記法文字列制限
OracleLISTAGGWITHIN GROUP上限あり(対策あり)
PostgreSQLSTRING_AGG... ORDER BY ...制限なし
MySQLSTRING_AGG / GROUP_CONCATORDER BY OK最大長設定可
SQL ServerSTRING_AGGWITHIN GROUP制限なし

まとめ

複数行の値を1行にまとめたい時は、DBごとに次の関数を使います👇

ケース使う関数
OracleLISTAGG
PostgreSQLSTRING_AGG
MySQLSTRING_AGG または GROUP_CONCAT
SQL ServerSTRING_AGG

✔よくある用途

  • システムロールや権限一覧を1行表示

  • 商品カテゴリをまとめて表示

  • ログタグや属性を1セルで表現

必要な時にすぐ引けるよう、ブックマーク推奨の機能です👍


📢終わりに

SQLはDBによって方言が多いですが、このまとめを覚えておくと業務で「値を1セルにまとめたい時」に迷わなくなります。

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x