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()があります。 ほぼ同じように機能する関数。