【发布时间】:2021-03-20 07:51:52
【问题描述】:
我有这个查询来检查一个人是否是客户或曾经是:
SELECT DISTINCT ON (person_id) person_id, person.name,
(CASE WHEN status = 'inactive' then 'Ex-Customer'
WHEN status = 'active' then 'Customer'
END) AS account_status
FROM person_subscription
INNER JOIN person ON person_subscription.person_id = person.id
ORDER BY person_id, status ASC
我还有其他查询来获取位置:
SELECT person_id, string_agg(name, ';' ORDER BY person_id)
FROM person_location WHERE person_id IN
(SELECT person_id FROM person_subscription WHERE status IS NOT NULL)
GROUP BY person_id;
如何将它们合并并在第一个查询中将人员位置显示为单行?
【问题讨论】:
-
第一个查询缺少
order by子句 - 没有它,当每个人有多个匹配项时,将选择哪一行是未定义的。 -
@GMB 我没有正确复制,现在已修复。
标签: sql postgresql inner-join greatest-n-per-group lateral-join