Я довольно новичок в postgres, и это, вероятно, вопрос новичка. Как я могу улучшить этот запрос?
Три таблицы, campaigns
1 -> M threads
1 -> M messages
. У меня есть идентификатор кампании, и я хочу, чтобы все потоки имели общее количество opens
, clicks
и replies
всех связанных сообщений, где opens
и clicks
находятся в поле JSONB с именем extra
в messages
и ответы messages
, которые имеют столбец "direction"='received'
.
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"