题目难度
中等
题目描述
你需要写一段 SQL 命令,筛选出过去一年中订单总量 少于10本 的 书籍 。
注意:不考虑 上架(available from)距今 不满一个月 的书籍。并且 假设今天是 2019-06-23 。
select b.book_id,name
from Books b
left join Orders o
on b.book_id=o.book_id
where timestampdiff(month,b.available_from,'2019-06-23')>0
group by b.book_id
having ifnull(sum(case when timestampdiff(year,dispatch_date,'2019-06-23')=0 then quantity else 0 end),0)<10
思想
两个要求:
- 不考虑上架(available from)距今不满一个月的书籍
Books表中available from列条件筛选,使用where筛选。 - 筛选出过去一年中订单总量少于10本的书籍
每本书是聚合函数的一个组,所以对书籍的筛选用(group by+having)。
知识点
- ifnull 是防止order表中没有订单的书籍,它的订单量为null,应该被筛选出来。
- timestampdiff函数计算日期时间差。可计算年、月、日等时间差。使用起来比datediff函数更加灵活。对于比较的两个时间,时间小的放在前面,时间大的放在后面。
mysql中日期范围搜索的三种方式:
https://blog.csdn.net/weixin_38319645/article/details/81050962