sql - 将多个简单查询转换为单个查询?

标签 sql database postgresql

我是 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

下面是表格中的数据。

row layout

最佳答案

如果没有看到表结构和示例数据,很难完全确定,但如果您想获得您在对另一个答案的评论中提到的所有计数,我认为这个查询就是您所需要的。

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/

相关文章:

mysql - 更新列同表

MySQL - 查询将整数按位字段拆分为每个位的 bool 列

mysql - Django 特性

sql - Postgresql - 如何对具有相同模式的多个表运行查询

sql - 通过 NHibernate 中的 CreateSQLQuery 返回类型化对象的列表

database - 在 Web 服务中处理 ID 的最佳实践是什么?

database - 如何有效地存储大量的 n 克?

java - HyperSQL - 意外标记开启

postgresql - 从 CSV 执行 COPY 时自动生成 ID 列

sql - 索引只影响 WHERE 子句?