ホームページ >データベース >mysql チュートリアル >さまざまな SQL データベースは文字列集計 (LISTAGG) をどのように実装しますか?
この記事では、異なる SQL データベースを使用して複数の文字列値を 1 つの文字列に連結する方法を説明します。 目標は、文字列フィールドを集計することです。
Oracle と DB2:
Oracle と DB2 は両方とも、組み込みの LISTAGG
関数を提供します。 構文は簡単です:
<code class="language-sql">SELECT FieldA, LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;</code>
PostgreSQL:
PostgreSQL は STRING_AGG
関数を利用します:
<code class="language-sql">SELECT FieldA, STRING_AGG(FieldB, ',') AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;</code>
SQL サーバー:
SQL Server 2017 以降のバージョンも STRING_AGG
をサポートします。 古いバージョン (2017 年より前) の場合は、STUFF
と FOR XML PATH
を使用したより複雑なアプローチが必要です。
<code class="language-sql">WITH CTE_TableName AS ( SELECT FieldA, FieldB FROM TableName ) SELECT t0.FieldA, STUFF(( SELECT ',' + t1.FieldB FROM CTE_TableName t1 WHERE t1.FieldA = t0.FieldA ORDER BY t1.FieldB FOR XML PATH('') ), 1, LEN(','), '') AS FieldBs FROM CTE_TableName t0 GROUP BY t0.FieldA ORDER BY FieldA;</code>
SQLite:
SQLite の GROUP_CONCAT
関数は文字列の集計を実行できます。 順序付けには CTE またはサブクエリが必要です:
注文時:
<code class="language-sql">WITH CTE_TableName AS ( SELECT FieldA, FieldB FROM TableName ORDER BY FieldA, FieldB ) SELECT FieldA, GROUP_CONCAT(FieldB, ',') AS FieldBs FROM CTE_TableName GROUP BY FieldA ORDER BY FieldA;</code>
注文なし:
<code class="language-sql">SELECT FieldA, GROUP_CONCAT(FieldB, ',') AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;</code>
以上がさまざまな SQL データベースは文字列集計 (LISTAGG) をどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。