当前位置:网站首页>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
边栏推荐
- 分支语句那些事儿(上)~~~~看完少走两月弯路!!
- Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
- GBASE 8s自定义存储过程和函数介绍
- 文档贡献与写作必读-OpenHarmony开发者文档风格指南
- pnpm + workspace + changesets 构建你的 monorepo 工程
- 通信岗秋招准备
- 五、HikariCP源码分析之初始化分析二
- @Accessors 注解详解
- DD5 进制转换
- 十一、HikariCP源码分析之HouseKeeper
猜你喜欢
随机推荐
Redis和MySQL如何保持数据一致性
【企业架构】描绘未来第 3 部分:产品路线图
Sort by a field in jsonArray
利用go通道channel实现互斥锁
GBASE 8s 数据索引
GBASE 8s 数据库的恢复
【板栗糖GIS】arcmap—如何在表格空值处进行批量求和
动态规划专题
通信岗秋招准备
INFTnews | Forbes Web3 exploration
一、HikariCP源码分析之获取连接流程一
新型LaaS协议Elephant Swap给ePLATO提供可持续溢价空间
专利说明书怎么写?
MySQL数据库进阶篇
i2c时序图的详细讲解[通俗易懂]
JZ22 链表中倒数最后k个结点
GBASE 8s 自定义存储过程和函数使用
NC193 二叉树的前序遍历
OPEN数据 | 新库上线 | CnOpenDataA股上市公司社会责任报告数据
C语言快速入门(为了看源码)








