当前位置:网站首页>MySQL面试题:用户金额充值面试题详解
MySQL面试题:用户金额充值面试题详解
2022-07-29 22:24:00 【宋宋讲编程】
今天我们继续MySQL面试题整理,今日的题目是用户充值金额相关

根据题目,我们来创建表
create table user_log(
login_date date comment '登陆日期',
user_id int comment '用户id'
);
create table payment_log(
order_id int primary key auto_increment comment '订单号',
pay_date date comment '支付日期',
user_id int comment '用户id',
revenue int comment '充值金额'
);
接下来为了更好的演示效果,我们来填充数据
insert into user_log values
('2022-03-11', 10),
('2022-03-19', 10),
('2022-03-21', 10),
('2022-03-22', 10),
('2022-03-25', 10),
('2022-03-29', 10),
('2022-04-11', 10),
('2022-04-13', 10),
('2022-04-17', 10),
('2022-03-10', 20),
('2022-03-11', 20),
('2022-03-14', 20),
('2022-03-16', 20),
('2022-03-20', 20),
('2022-04-11', 20),
('2022-04-13', 20),
('2022-04-17', 20),
('2022-04-21', 20),
('2022-05-01', 20);
insert into payment_log(pay_date, user_id, revenue) values
('2022-03-11', 10, 30),
('2022-03-11', 10, 30),
('2022-03-11', 10, 30),
('2022-03-11', 10, 30),
('2022-03-19', 10, 50),
('2022-03-19', 10, 50),
('2022-03-21', 10, 100),
('2022-03-21', 10, 100),
('2022-03-21', 10, 100),
('2022-03-22', 10, 20),
('2022-03-22', 10, 20),
('2022-03-25', 10, 10),
('2022-03-29', 10, 10),
('2022-04-11', 10, 70),
('2022-04-11', 10, 70),
('2022-04-13', 10, 80),
('2022-04-17', 10, 90),
('2022-03-10', 20, 90),
('2022-03-11', 20, 80),
('2022-03-14', 20, 60),
('2022-03-16', 20, 120),
('2022-03-20', 20, 99),
('2022-04-11', 20, 87),
('2022-04-13', 20, 53),
('2022-04-17', 20, 56),
('2022-04-21', 20, 77),
('2022-05-01', 20, 32),
('2022-03-10', 20, 29),
('2022-03-11', 20, 30),
('2022-03-14', 20, 18),
('2022-03-16', 20, 6),
('2022-03-20', 20, 19),
('2022-04-11', 20, 21),
('2022-04-13', 20, 20),
('2022-04-17', 20, 76),
('2022-04-21', 20, 82),
('2022-05-01', 20, 91);
万事具备,我们来完成需求吧
/*
需求1:提取每个用户每日累计充值金额
需求2: 提取每个用户最后登陆7天的充值金额
*/
-- 提取每个用户每日累计充值金额
/*
思路:在payment_log中 针对于用户与日期分组 将金额累计求和
*/
select user_id, pay_date, sum(revenue) as 充值金额
from payment_log group by user_id, pay_date;
-- 提取每个用户最后登陆7天的充值金额
/*
要想获取相应的数据 我们需要连接查询
我们将上面每个用户每日的重置金额与用户表连接
*/
select t.*, login_date,
row_number() over(partition by user_id order by login_date desc) ranking
from (select user_id, pay_date, sum(revenue) as 充值金额
from payment_log group by user_id, pay_date) as t join user_log
on t.user_id=user_log.user_id and pay_date=login_date;
-- 以此数据为基础 找到前7个 然后统计每个用户的充值金额
select user_id, sum(充值金额) from
(select t.*, login_date,
row_number() over(partition by user_id order by login_date desc) ranking
from (select user_id, pay_date, sum(revenue) as 充值金额
from payment_log group by user_id, pay_date) as t join user_log
on t.user_id=user_log.user_id and pay_date=login_date) as t1
where ranking < 8 group by user_id;
-END-
扫码添加请备注:python,进群与宋老师面对面交流:517745409
边栏推荐
- php反序列化结构知识点实例分析
- 《MySQL DBA封神打怪之路》专栏学习大纲
- JZ25 合并两个排序的链表
- WY16 不要二
- SQL 改写系列七:谓词移动
- 高等数学(第七版)同济大学 习题3-7 个人解答
- Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
- Redis和MySQL如何保持数据一致性
- 【CVPR2022】A Unified Query-based Paradigm for Point Cloud Understanding
- [BUG]一个数组new的时候sizeof()忘乘上个数
猜你喜欢
随机推荐
Sort by a field in jsonArray
PLSQL Developer安装和配置
中科院TextMind(文心)安装及使用
03-树3 Tree Traversals Again(树的遍历)
7.联合索引(最左前缀原则)
GBASE 8s 数据库的智能大对象备份
【LeetCode】36、有效的数独
GBASE 8s 如何并行执行update statistics
JZ22 链表中倒数最后k个结点
八、HikariCP源码分析之ConcurrentBag一
一、HikariCP源码分析之获取连接流程一
GBASE 8s 自定义存储过程和函数使用
JZ39 数组中出现次数超过一半的数字
i2c时序图的详细讲解[通俗易懂]
WSDM‘22推荐系统论文梳理
毕业论文文献综述写作技巧,超级详细!
GBASE 8s 如何查看 sbspace 中的可用空间
文档贡献与写作必读-OpenHarmony开发者文档风格指南
【板栗糖GIS】arcmap—如何在表格空值处进行批量求和
Professor Lu Shouqun from COPU was invited to give a speech at ApacheCon Asia









