MySQLやMariaDBなどの一部のRDBMSには、GROUP_CONCAT()
があります。 クエリ列を区切りリスト(たとえば、コンマ区切りのリスト)として返すことができる関数。
PostgreSQLには、STRING_AGG()
と呼ばれる同様の関数があります。 。この関数は、GROUP_CONCAT()
とほぼ同じように機能します。 MySQLとMariaDBで動作します。
例
これは、PostgreSQLのSTRING_AGG()
がどのように行われるかを示す基本的な例です。 機能は動作します:
SELECT STRING_AGG(genre, ',') FROM Genres;
結果:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
STRING_AGG()
を使用せずにクエリを実行するとどうなりますか。 機能:
SELECT genre FROM Genres;
結果:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
すべての値の1つの長いコンマ区切り行ではなく、それぞれ個別の値を持つ8つの行を取得します。
どちらかといえば、PostgreSQLのSTRING_AGG()
MySQLのGROUP_CONCAT()
に似ています 同じ名前のMariaDBの関数よりも。これは、MariaDBのGROUP_CONCAT()
LIMIT
を提供できます 関数自体の中からの句(MariaDB 10.3.3から)。 MySQL GROUP_CONCAT()
LIMIT
をサポートしていません 節であり、PostgreSQLのSTRING_AGG()
も同様です。 関数(少なくとも、この記事の執筆時点ではありません)。
もう1つの違いは、PostgreSQLのSTRING_AGG()
2番目の引数が必要です(使用する区切り文字を指定します)。 MySQLとMariaDBはどちらも、GROUP_CONCAT()
を使用してこれをオプションにします。 機能。
PostgresのSTRING_AGG()
ORDER BY
を受け入れます 句、およびDISTINCT
句(MariaDBおよびMySQLのGROUP_CONCAT()
機能)。
STRING_AGG()
を参照してください その他の例については、PostgreSQLで機能してください。
また、興味がある場合は、SQLServerにもSTRING_AGG()
があります。 ほぼ同じように機能する関数。