web-dev-qa-db-ja.com

postgres selectで、列のサブクエリを配列として返しますか?

(これは以前に行ったことがありますが、ゴーグルがそうであるように、メモリが消えます)

配列として返される各ユーザーのtag.tag_idsを使用してusersから選択を取得します。

 select usr_id、
 name、
(タグtからt.tag_idを選択します。ここで、t.usr_id = u.usr_idとして)、ユーザーu; [からのtag_arr 
として選択します。 ____。]

埋め込みクエリtag_arrのアイデアは配列になります

19
cc young

集計関数 を使用します。

select
    usr_id, 
    name, 
    array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name

または、サブクエリの結果からの 配列コンストラクタ

select
    u.usr_id, 
    name, 
    array(
        select tag_id 
        from tags t 
        where t.usr_id = u.usr_id
        ) as tag_arr
from users u

2番目のオプションはシンプルで高速ですが、最初のオプションはより一般的です。特に、関連するテーブルから複数の集計が必要な場合に便利です。

23
klin