我是 SQL 的新手,所以必须像我 5 岁一样解释事情。我试图弄清楚有多少人执行了“单击了解更多”事件,然后继续执行该事件“设置试用状态”。我使用的是 Postgres,所以还有一个额外的 AND payload->>'status' = true
我为了简化它而省略了它。本质上,我需要将以下伪查询转换为功能性单一查询。
SELECT DISTINCT booking_id
FROM venue_events
WHERE name = 'clicked learn more'`;
SELECT count(*)
FROM venue_events
WHERE booking = booking_id AND name = 'set trial status' AND payload->>'status' = true;
我怎样才能将它变成一个本质上的单个 SQL 查询,第二个使用第一个中的 booking_ids
下面是表格中的数据。
最佳答案
如果没有看到表结构和示例数据,很难完全确定,但如果您想获得您在对另一个答案的评论中提到的所有计数,我认为这个查询就是您所需要的。
SELECT v1.booking_id AS booking_id,
COUNT(v1.booking_id) AS Clicked_learn_more,
COUNT(v2.booking_id) AS Set_trial_status_true,
COUNT(v3.booking_id) AS Completed_booking
FROM (SELECT DISTINCT booking_id
FROM venue_events
WHERE name='clicked learn more' AND payload->>'status' = true) v1
LEFT JOIN (SELECT DISTINCT booking_id
FROM venue_events
WHERE name='set trial status' AND payload->>'status' = true) v2
ON v2.booking_id = v1.booking_id
LEFT JOIN (SELECT DISTINCT booking_id
FROM venue_events
WHERE name='completed booking' AND payload->>'status' = true) v3
ON v3.booking_id = v1.booking_id
GROUP BY v1.booking_id
关于sql - 将多个简单查询转换为单个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52305063/