我正在运行Postgres 9.6。我们有两个表,第一个是user
:
id | integer
name | varchar
第二个是feature_flag
,它具有user
的外键:
id | integer
user_id | integer
我想创建一个表用户,该表显示(除其他事项外)用户已启用的功能标志-可能带有一个用于功能标志的数组列(向更好的建议开放,例如可以是每个功能标志中带有T /的列F)。
所以结果可能看起来像这样:
id,name,flags
1,foo,"[1,3]"
2,bar,"[1,2]"
或者这样:
id,name,flag_1,flag_2,flag_3
1,foo,T,F,T
2,bar,T,T,F
我该怎么做?我知道如何为每个用户的每个标志获取一行:
SELECT u.*, feature_flags
FROM "user" u
OUTER JOIN feature_flag f on f.user_id=u.id
但是我如何将其向上滚动到上面?
答案 0 :(得分:0)
您可以汇总标志:
SELECT u.*, array_agg(f.integer) as feature_flags
FROM "user" u
LEFT JOIN feature_flag f on f.user_id=u.id
group by u.id;
以上要求"user".id
是表"user"
的主键
如果标志的上限,则可以使用以下内容创建列:
select id, name,
1 = any(feature_flags) as flag_1,
2 = any(feature_flags) as flag_2,
3 = any(feature_flags) as flag_3,
....
from (
SELECT u.*, array_agg(f.integer) as feature_flags
FROM "user" u
LEFT JOIN feature_flag f on f.user_id=u.id
group by u.id
) t