繁体   English   中英

如何查找具有特定日期开始日期的每位用户的收入数量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM