SQL面试题(一)

请根据题目要求写出完整的SQL代码:
目前有一张全量的用户购买大会员的明细表TableA,需要将每笔大会员的收入摊销, 即按照用户购买的时间均匀的记到每一天(如用户购买了一个15元的7月26日-8月25日的月度大会员,则在此期间每天的收入为15/31=0.48元的收入),现在想要统计2021年1月至6月每个月的大会员摊销收入。

TableA

user_id begin_date end_date pay_amount
1000 2021-02-03 2022-02-03 144
1001 2021-08-07 2022-08-07 144

TableB

SQL水平一般,试着用MySQL写一下,不知有没有更好的方法:

SELECT 
    B.y_m,
    SUM(A.pay_amount/DATEDIFF(A.end_date, A.begin_date) + 1) AS monthly_income
FROM 
    TableA A
    JOIN TableB B ON B.m_date BETWEEN A.begin_date AND A.end_date
WHERE 
    B.y_m BETWEEN '2021-01' AND '2021-06'
GROUP BY 
    B.y_m;

你可能感兴趣的:(面试,职场和发展)