[英]How to find the AVG per user using a start date and for a specific period of time
[英]How do find the number of revenue per user with a start date for a specific amount of days
假设您有一个用户表,其中包含他们的注册日期。 还有一张带有他们的收入的表格我们如何计算自每个成员使用mySQL命令注册以来6个月或9个月的收入金额?
表1有2列:1. user_id 2. date_of_join表2有4列:1.purchase_id 2.user_id 3.purchase_amount 4.purchase_date。
我想做这样的事情
SELECT Users.user_id, AVG(Purchases.purchase_amount)
FROM Users
INNER JOIN Purchases
WHERE MONTH(Users.date_of_join) = 06
AND AVG(Purchases.purchase_amount) BETWEEN Users.date_of_join AND DATE_ADD(date_of_join, INTERVAL 30);
您需要总收入还是每次购买的平均收入?
如果您只需要总计,则可以尝试这样的操作-
SELECT U.USER_ID, SUM(PURCHASES.PURCHASE_AMOUNT)
FROM USERS U
INNER JOIN PURCHASES P
ON U.USER_ID = P.USER_ID
WHERE P.PURCHASE_DATE >= U.DATE_OF_JOIN
AND P.PURCHASE_DATE < DATE_ADD(U.DATE_OF_JOIN, INTERVAL 6 MONTH)
GROUP BY U.USER_ID;
平均而言,只需将SUM
替换为AVG
这将选择ID为5的用户注册日期后6个月内的所有购买
SELECT p.*
FROM Purchases p
INNER JOIN Users u ON u.id=p.user_id
WHERE p.purchase_date BETWEEN u.date_of_join AND DATE_ADD(u.date_of_join, INTERVAL 6 MONTH) AND u.id=5;
然后选择平均值是微不足道的
SELECT AVG(p.purchase_amount)
FROM Purchases p
INNER JOIN Users u ON u.id=p.user_id
WHERE p.purchase_date BETWEEN u.date_of_join AND DATE_ADD(u.date_of_join, INTERVAL 6 MONTH) AND u.id=5;
如果您希望所有间隔都作为单独的列,那么它会变得有些复杂,但仍然相当容易。
SELECT avg_3.amount as avg_3, avg_6.amount as avg_6, avg_9.amount as avg_9
FROM Users u
INNER JOIN (
SELECT AVG(p.purchase_amount) amount, p.user_id
FROM Purchases p
INNER JOIN Users u ON u.id=p.user_id
WHERE p.purchase_date BETWEEN u.date_of_join AND DATE_ADD(u.date_of_join, INTERVAL 3 MONTH)
GROUP BY p.user_id
) as avg_3 ON u.id=avg_3.user_id
INNER JOIN (
SELECT AVG(p.purchase_amount) amount, p.user_id
FROM Purchases p
INNER JOIN Users u ON u.id=p.user_id
WHERE p.purchase_date BETWEEN u.date_of_join AND DATE_ADD(u.date_of_join, INTERVAL 6 MONTH)
GROUP BY p.user_id
) as avg_6 ON u.id=avg_6.user_id
INNER JOIN (
SELECT AVG(p.purchase_amount) amount, p.user_id
FROM Purchases p
INNER JOIN Users u ON u.id=p.user_id
WHERE p.purchase_date BETWEEN u.date_of_join AND DATE_ADD(u.date_of_join, INTERVAL 9 MONTH)
GROUP BY p.user_id
) as avg_9 ON u.id=avg_9.user_id
WHERE u.id=5;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.