sql - 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。
先感谢您,
安德烈亚
解决方案
您错过了添加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
推荐阅读
- c# - 类设计悖论
- apache-camel - 为什么我的 ConsumerTemplate 没有从 ActiveMQ 主题中读取任何消息?
- android - 基于具有空值的对象构建字符串
- aes - Java AES 256 Decrypt 不解密前 16 个字节
- apache - 为什么我的 Sassy CSS 样式没有被应用?在 Chrome 开发工具中使用 Scss 接收 MIME 类型错误
- generics - 如何让 F# 编译器将我的参数推断为泛型函数?
- linux - 为什么 lspci 列出 pcie 设备?
- system-verilog - 在System Verilog中,如何判断一个类项是否存在?
- sql-server - 如果在存储过程创建中出现问题
- hadoop - Hive 配置不反映