SQL语句学习强关注点-牛客网大厂笔试真题练习(五)
- 2026-10-21 10:27:45
2026

04/09
地点:世界梦想

期
待
改
变
Here's to the changes we'll make, one practice at a time.

采取刷题-总结-输出的形式学会SQL
接下来这段时间我会直接去做真题,并且总结知识点、输出
1
题号:SQL43
题目:获取指定客户每月的消费额
< 难度 | 中 等 >
具体要求:需要查询 Tom 这个客户在 2023 年每月的消费金额(按月份正序显示),结果保留1位小数。
数据表


看客户的消费情况,肯定两个表要关联起来:交易表的t_cus与客户表的c_id是对应的。
解析:①表连接:
ON t.t_cus = c.c_id:通过客户ID进行连接。
②过滤数据:客户是tom,时间是2023年,交易类型需要为1表示消费
③按月汇总:这个时间需要处理成“2023-01”这样的结构:
DATE_FORMAT(t.t_time, '%Y-%m') AS time
记得吗,过往学过Y表示4位年份,m表示两位月份
如果是%y小写的话,表示2位年份,如2026->26
%c calendar month 月份(不带前导零)
处理好时间,对每月消费金融求和sum,每月分组用group by
④排序 升序asc就结束了
SELECTDATE_FORMAT(t.t_time, '%Y-%m') AS time,ROUND(SUM(t.t_amount),1) AS totalFROMtrade tJOINcustomer c ON t.t_cus = c.c_idWHEREt.t_type =1AND c.c_name ='TOM'AND YEAR(t.t_time) =2023GROUP BYtimeORDER BYtime
2
题号:SQL44
题目:查询连续入住多晚的客户信息?
< 难度 | 中 等 >
具体要求:请查询该酒店从6月12日开始连续入住多晚的客户信息?
要求输出:客户id、房间号、房间类型、连续入住天数(按照连续入住天数的升序排序,再按照房间号的升序排序,再按照客户id的降序排序)
数据表


客户信息和入住信息是分开的,两个表通过room_id关联。
解析:请查询该酒店从6月12日开始连续入住多晚的客户信息?
①连接表:
ON gt.room_id = ct.room_id:通过房间号进行连接。
②计算入住天数:使用datediff:
DATEDIFF(ct.checkout_time, ct.checkin_time):前后两个时间做差来计算入住天数。
过往学过一个时间差函数是timestampdiff,这个是具体时间单位。而datediff是粗略的时间天数差,就是整数。
③过滤数据:
DATE(ct.checkin_time) = '2022-06-12':选择在2022年6月12日入住的记录。
DATEDIFF(ct.checkout_time, ct.checkin_time) >= 2:选择连续入住至少两晚的记录
SELECTct.user_id,ct.room_id,gt.room_type,DATEDIFF(ct.checkout_time, ct.checkin_time) AS daysFROMcheckin_tb ctJOINguestroom_tb gt ON gt.room_id = ct.room_idWHEREDATE(ct.checkin_time) ='2022-06-12'AND DATEDIFF(ct.checkout_time, ct.checkin_time) >=2ORDER BYdays ASC, ct.room_id ASC, ct.user_id DESC

求点赞

求分享
求喜欢

2026-04-09
练习路径:“牛客网-SQL篇-SQL大厂笔试真题”;
date_format和datediff,今天这两题都是中等难度的,有没有发现开始跟时间关联上了,所以时间很重要哦。
Learning