首页 > 解决方案 > SQL - 来自另一个表的 WHERE 条件

问题描述

我必须研究客户每次会话在应用程序上购买东西的次数。所以我必须使用两张桌子。第一个(称为“会话”)以这种方式构造

用户 ID | session_id | 开始会话时间 | end_session_time

第二个(称为“购买”)的结构是这样的:

用户 ID | 时间戳 | 购买编号

其中 user_id、session_id 和 purchase_id 是唯一的。

我的最终目标是有一个表格来计算用户在每个会话中购买了多少次。我想要的输出是:

用户 ID | session_id | 开始会话时间 | end_session_time | nb_purchases

在我看来,这将是一个类似的查询:

SELECT sessions.user_id, sessions.session_id, sessions.start_time,
       sessions.end_time, count(purchases.purchase_id)
FROM sessions 
LEFT JOIN purchases 
    ON sessions.user_id = purchases.user_id
WHERE purchases.timestamp BETWEEN sessions.start_time AND sessions.end_time

有人可以帮我解决这个问题吗?

我正在使用 SQL Amazon Redshift。

先感谢您,

安德烈亚

标签: sqljoinleft-joinamazon-redshift

解决方案


您错过了添加GROUP BY

SELECT
    sessions.user_id
   ,sessions.session_id
   ,sessions.start_time
   ,sessions.end_time
   ,COUNT(purchases.purchase_id)
FROM sessions
LEFT JOIN purchases
    ON sessions.user_id = purchases.user_id
WHERE purchases.timestamp BETWEEN sessions.start_time AND sessions.end_time
GROUP BY
    sessions.user_id
   ,sessions.session_id
   ,sessions.start_time
   ,sessions.end_time

推荐阅读