在MYSQL中基于另外两个表创建一个新表

时间:2020-10-30 02:51:35

标签: mysql sql compare create-table

基于SQL中的另外两个表创建一个新表。第一个表USER有一个变量

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

COUPON表有两个变量

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

问题是创建一个新表USER_SUMMARY。计算purchase_time之前和之后收到的优惠券的数量,并计算收到的优惠券的总数。如果在puchase_time之后未收到优惠券,则计数为0。最终创建的表格应如下所示:

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语法来实现。预先感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用CREATE ... SELECT查询来生成user_summary表。 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