• MySQL面试题:用户金额充值面试题详解


    今天我们继续MySQL面试题整理,今日的题目是用户充值金额相关

    根据题目,我们来创建表

    1. create table user_log(
    2. login_date date comment '登陆日期',
    3. user_id int comment '用户id'
    4. );
    5. create table payment_log(
    6. order_id int primary key auto_increment comment '订单号',
    7. pay_date date comment '支付日期',
    8. user_id int comment '用户id',
    9. revenue int comment '充值金额'
    10. );

    接下来为了更好的演示效果,我们来填充数据

    1. insert into user_log values
    2. ('2022-03-11'10),
    3. ('2022-03-19'10),
    4. ('2022-03-21'10),
    5. ('2022-03-22'10),
    6. ('2022-03-25'10),
    7. ('2022-03-29'10),
    8. ('2022-04-11'10),
    9. ('2022-04-13'10),
    10. ('2022-04-17'10),
    11. ('2022-03-10'20),
    12. ('2022-03-11'20),
    13. ('2022-03-14'20),
    14. ('2022-03-16'20),
    15. ('2022-03-20'20),
    16. ('2022-04-11'20),
    17. ('2022-04-13'20),
    18. ('2022-04-17'20),
    19. ('2022-04-21'20),
    20. ('2022-05-01'20);
    21. insert into payment_log(pay_date, user_id, revenue) values
    22. ('2022-03-11'1030),
    23. ('2022-03-11'1030),
    24. ('2022-03-11'1030),
    25. ('2022-03-11'1030),
    26. ('2022-03-19'1050),
    27. ('2022-03-19'1050),
    28. ('2022-03-21'10100),
    29. ('2022-03-21'10100),
    30. ('2022-03-21'10100),
    31. ('2022-03-22'1020),
    32. ('2022-03-22'1020),
    33. ('2022-03-25'1010),
    34. ('2022-03-29'1010),
    35. ('2022-04-11'1070),
    36. ('2022-04-11'1070),
    37. ('2022-04-13'1080),
    38. ('2022-04-17'1090),
    39. ('2022-03-10'2090),
    40. ('2022-03-11'2080),
    41. ('2022-03-14'2060),
    42. ('2022-03-16'20120),
    43. ('2022-03-20'2099),
    44. ('2022-04-11'2087),
    45. ('2022-04-13'2053),
    46. ('2022-04-17'2056),
    47. ('2022-04-21'2077),
    48. ('2022-05-01'2032),
    49. ('2022-03-10'2029),
    50. ('2022-03-11'2030),
    51. ('2022-03-14'2018),
    52. ('2022-03-16'206),
    53. ('2022-03-20'2019),
    54. ('2022-04-11'2021),
    55. ('2022-04-13'2020),
    56. ('2022-04-17'2076),
    57. ('2022-04-21'2082),
    58. ('2022-05-01'2091);

    万事具备,我们来完成需求吧

    1. /*
    2. 需求1:提取每个用户每日累计充值金额
    3. 需求2: 提取每个用户最后登陆7天的充值金额
    4. */
    5. -- 提取每个用户每日累计充值金额
    6. /*
    7. 思路:在payment_log中 针对于用户与日期分组 将金额累计求和
    8. */
    9. select user_id, pay_date, sum(revenue) as 充值金额
    10. from payment_log group by user_id, pay_date;
    11. -- 提取每个用户最后登陆7天的充值金额
    12. /*
    13. 要想获取相应的数据 我们需要连接查询 
    14. 我们将上面每个用户每日的重置金额与用户表连接
    15. */
    16. select t.*, login_date,
    17. row_number() over(partition by user_id order by login_date desc) ranking
    18. from (select user_id, pay_date, sum(revenue) as 充值金额
    19. from payment_log group by user_id, pay_date) as t join user_log
    20. on t.user_id=user_log.user_id and pay_date=login_date;
    21. -- 以此数据为基础 找到前7个 然后统计每个用户的充值金额
    22. select user_id, sum(充值金额) from
    23. (select t.*, login_date,
    24. row_number() over(partition by user_id order by login_date desc) ranking
    25. from (select user_id, pay_date, sum(revenue) as 充值金额
    26. from payment_log group by user_id, pay_date) as t join user_log
    27. on t.user_id=user_log.user_id and pay_date=login_date) as t1
    28. where ranking < 8 group by user_id;

    -END-

    扫码添加请备注:python,进群与宋老师面对面交流:517745409

     

     

  • 相关阅读:
    二叉树的操作大全
    程序员学习 CPU 有什么用?
    Android4.4 Camera callback注册和回调过程分析
    数据结构之后缀树
    windows mysql解压缩版安装指南
    复习十:栈与递归的实现
    100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
    PHP require/include 区别
    Java 架构师进阶必备 24 种设计模式学习资源,速速看过来!
    使用RTSP接入安防监控EasyCVR平台,如何配置系统参数以减少起播时间?
  • 原文地址:https://blog.csdn.net/qiqi1220/article/details/126030185