sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT()と同等

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


    1. さまざまなアルゴリズムを使用したUUID衝突リスク

    2. SQLで文字列を連結する方法

    3. 惑星の配置

    4. 私が選ぶべきもの-JSONまたはSQLite?