我必须研究客户每次会话在应用程序上购买商品的次数。所以我必须使用两个表。第一个(称为“ 会话”)的结构是这样的
user_id | session_id | start_session_time | end_session_time
第二个(称为“ 购买”)的结构如下:
user_id |时间戳| Purchase_id
其中user_id,session_id和Purchases_id是唯一的。
我的最终目标是要有一个表来统计用户在每个会话中购买了多少次。我想要的输出是:
user_id | session_id | start_session_time | 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。
先谢谢您
安德里亚
答案 0 :(得分:0)
您错过了添加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
答案 1 :(得分:0)
您正在使用left join
,因此该条件需要放在on
子句中。然后,您还需要一个GROUP BY
:
SELECT s.user_id, s.session_id, s.start_time, s.end_time, count(p.purchase_id)
FROM sessions s LEFT JOIN
purchases p
ON s.user_id = p.user_id AND
p.timestamp BETWEEN s.start_time AND s.end_time
GROUP BY s.user_id, s.session_id, s.start_time, s.end_time;