力扣1098(MySQL)-小众书籍(中等)
题目:
书籍表 Books:
book_id 是这个表的主键
订单表 Orders:
order_id 是这个表的主键。
book_id 是 Books 表的外键。
问题
你需要写一段 SQL 命令,筛选出过去一年中订单总量 少于10本 的 书籍 。
注意:不考虑 上架(available from)距今 不满一个月 的书籍。并且 假设今天是 2019-06-23 。
示例
Books 表:
Orders 表:
Result 表:
建表语句:
1 Create table If Not Exists Books_1098 (book_id int, name varchar(50), available_from date); 2 Create table If Not Exists Orders_1098 (order_id int, book_id int, quantity int, dispatch_date date); 3 Truncate table Books_1098; 4 insert into Books_1098 (book_id, name, available_from) values ('1', 'Kalila And Demna', '2010-01-01'), ('2', '28 Letters', '2012-05-12'),('3', 'The Hobbit', '2019-06-10'),('4', '13 Reasons Why', '2019-06-01'), ('5', 'The Hunger Games', '2008-09-21'); 5 Truncate table Orders_1098; 6 insert into Orders_1098 (order_id, book_id, quantity, dispatch_date) values ('1', '1', '2', '2018-07-26'),('2', '1', '1', '2018-11-05'),('3', '3', '8', '2019-06-11'),('4', '4', '6', '2019-06-05'),('5', '4', '5', '2019-06-20'),('6', '5', '9', '2009-02-02'),('7', '5', '8', '2010-04-13');
解题思路:
方法一:
①先筛选出Orders 表过去一年的出售数大于10的book_id
1 select book_id 2 from orders_1098 3 where dispatch_date between '2018-06-23' and '2019-06-23' 4 group by book_id 5 having sum(quantity) > 10
②再去books表中筛选出 出版日期大于1个月且不在上一步筛选出的book_id 的book_id 和 name
1 select book_id,name 2 from books_1098 3 where book_id not in ( 4 select book_id 5 from orders_1098 6 where dispatch_date between '2018-06-23' and '2019-06-23' 7 group by book_id 8 having sum(quantity) > 10 9 ) and available_from <= '2019-05-23'
方法二:
用on 筛选出orders表中订单时间小于一年的数据进行左连接books表,然后where筛选出 出版时间大于一个月的数据,再以book_id进行分组,使用having 筛选出出售数量小于10,最后select出book_id和name。
注意:
因为on去筛选,没有订单的至少返回null;而不符合where条件的,连null都不会保留。所以不满一个月应放在where后,过去一年中应放在on后。
1 select a.book_id,name 2 from books_1098 a 3 left join orders_1098 b 4 on a.book_id = b.book_id and datediff('2019-06-23',dispatch_date) <= 365 5 where datediff('2019-06-23',available_from) >= 30 6 group by a.book_id 7 having ifnull(sum(quantity),0) < 10
注意:
这道题力扣需要会员,故题解仅测试数据正确,不知道力扣是否能通过,如果有老师看到这篇博客,如果有问题不通过麻烦给我说一下,谢谢老师~
标签:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-04-11 力扣453(java)-最小操作次数使数组元素相等(简单)