根据 MYSQL 中的另外两个 table 创建一个新的 table

Create a new table based on another two tables in MYSQL

根据 SQL 中的另外两个 table 创建一个新的 table。第一个 table USER 有一个变量

user_id     | purchase_time  
-----------------------------
Marta       | 10/20/2019             
Steve       | 10/21/2019            
Michael     | 10/18/2019           

而 COUPON table 有两个变量

user_id     | coupon_id        | coupon_time 
-------------------------------------------
Marta       | 12345            | 10/21/2019 
Steve       | 12356            | 10/18/2019 
Marta       | 12365            | 10/01/2019 
Michael     |                  |  

问题是创建一个新的 table USER_SUMMARY。统计purchase_time前后收到的优惠券数量,统计收到的优惠券总数。如果 puchase_time 后没有收到优惠券,则计为 0。最终创建的 table 应该如下所示:

user_id     | purchase_before_coupon        | purchase_after coupon    | total_coupons 
--------------------------------------------------------------------------------------
Marta       | 1                             | 1                        | 2                        
Steve       | 0                             | 1                        | 1
Michael     | 0                             | 0                        | 0

如果在 Python 或 R 中完成应该不会很复杂,但我不太清楚如何在 SQL 语法中完成。提前致谢!

您可以使用 CREATE ... SELECT 查询生成 user_summary table。 SELECT 查询计算每个用户在每张优惠券之前或之后进行了多少次购买,以及计算他们的优惠券总数:

CREATE TABLE user_summary AS
SELECT u.user_id, 
       COALESCE(SUM(u.purchase_time < c.coupon_time), 0) AS purchase_before,
       COALESCE(SUM(u.purchase_time >= c.coupon_time), 0) AS purchase_after,
       COUNT(c.coupon_id) AS total
FROM user u
LEFT JOIN coupon c ON c.user_id = u.user_id
GROUP BY u.user_id

运行 此查询后的(SELECT * FROM user_summary 的)输出:

user_id     purchase_before     purchase_after  total
Marta       1                   1               2
Michael     0                   0               0
Steve       0                   1               1

Demo on db-fiddle