[英]Average revenue per member from January within 1 month and 2 months of the signup date
我需要计算在注册日期的 1 个月和 2 个月内在 1 月份注册的每个成员的平均收入。
仅使用 SELECT 语句提供输出(无临时表或函数)。 也在寻找 MYSQL 语法
我有2张桌子。
Table: memberships, Columns:
member_id int PK
signup_date datetime
join_country varchar(2)
email varchar(45)
cancellation_date date
expiry_date date
Table: transactions, Columns:
transaction_id int PK
member_id int
transaction_date datetime
transaction_type_ID int
product_id int
transaction_amount float
SELECT m.member_id, m.signup_date, AVG(t.transaction_amount)
FROM memberships m
INNER JOIN transactions t
ON m.member_id = t.member_id
WHERE m.signup_date = '2018-01-01'
AND t.transaction_date >= '2018-01-01' AND t.transaction_date < '2018-03-01';
你只做在 1 月 1 日注册的会员,而不是在整个 1 月。 同样,您计算的是从 1 月 1 日算起的 2 个月,而不是他们的实际注册日期。
您不是在计算每个成员的平均值,而是在计算每笔交易的平均值。 您需要一个子查询来获取每个成员的总收入,然后主查询可以获得这个的平均值。
您没有按月对收入进行分组,因此注册后 1 个月和 2 个月不会产生单独的结果。
SELECT month, AVG(total) AS avg_revenue
FROM (
SELECT TIMESTAMPDIFF(month, m.signup_date, t.transaction_date)+1 AS month,
SUM(t.transaction_amount) AS total
FROM mindgeek.memberships m
INNER JOIN mindgeek.transactions t
ON m.member_id = t.member_id AND t.transaction_date < DATE_ADD(m.signup_date, INTERVAL 2 MONTH)
WHERE m.signup_date BETWEEN '2018-01-01' AND '2018-01-31'
GROUP BY m.member_id, month
) AS per_member
GROUP BY month
我将TIMESTAMPDIFF()
的结果加1
,因为它返回整月数,向下取整。 所以从注册到 1 个月后的时间段返回0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.