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

PostgreSQLでコンマ区切りリストとしてクエリ結果を返す方法

    Postgresでは、STRING_AGG()を使用できます クエリ結果をコンマ区切りのリストに変換する関数。

    (通常のクエリのように)各値が別々の行に出力される代わりに、値はコンマ(または選択した他の区切り文字)で区切られた単一の行に出力されます。

    次のクエリを実行するとします。

    SELECT * 
    FROM Genres;

    結果:

    +---------+---------+
    | genreid |  genre  |
    +---------+---------+
    |       1 | Rock    |
    |       2 | Jazz    |
    |       3 | Country |
    |       4 | Pop     |
    |       5 | Blues   |
    |       6 | Hip Hop |
    |       7 | Rap     |
    |       8 | Punk    |
    +---------+---------+
    (8 rows)

    次のクエリを実行して、genreを出力できます。 カンマ区切りのリストとしての列:

    SELECT STRING_AGG(genre, ', ')
    FROM Genres;

    結果:

    +-----------------------------------------------------+
    |                     string_agg                      |
    +-----------------------------------------------------+
    | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk |
    +-----------------------------------------------------+
    (1 row)

    GenreIdを含めることもできます 必要に応じてリストの列:

    SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC) 
    FROM Genres;

    結果:

    1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk

    ここでは、ORDER BYも使用しました STRING_AGG()内の句 GenreIdで結果を並べ替えるための関数 昇順。

    また、重複を削除するなどのこともできます(DISTINCTを使用) 句)、別の区切り文字を使用し、グループ化されたクエリ内で関数を使用します。

    STRING_AGG()を参照してください 例としてPostgreSQLの関数。


    1. アソシエーションテーブルの正しい名前は何ですか(多対多の関係)

    2. コマンドラインを使用したSQLデータベースの移行

    3. MySQLで文字列内の部分文字列の位置を見つける3つの方法

    4. Postgresqlの見出しを含むCSVとしてテーブルをエクスポートするにはどうすればよいですか?