【发布时间】:2020-03-18 09:57:56
【问题描述】:
我对 postgres 很陌生,这可能是一个新手问题。如何改进此查询?
三个表,campaigns 1-->M threads 1-->M messages。我有活动 ID,并且我希望所有线程及其全部个体 opens、clicks 和 replies 计数所有相关消息,其中 opens 和 clicks 在名为 extra 的 JSONB 字段中messages 和回复是具有 "direction"='received' 列的 messages。
select "threads".*,
count("messages"."extra"->'opens') as opens,
count("messages"."extra"->'clicks') as clicks,
(
select count("messages"."id")
from "messages"
where "messages"."thread_id" = "threads"."id"
and "messages"."direction"='received'
) as replies
from "threads"
inner join "messages"
on "messages"."thread_id" = "threads"."id"
where "threads"."campaign_id"
in ('campaign_uuid')
group by "threads"."id"
【问题讨论】:
标签: sql json postgresql group-by query-optimization