每日一题-42(小众书籍)

题42:

根据下面两个表写一段SQL命令,筛选出过去一年中订单总量少于10本的书籍。其中:不考虑上架(available from)距今不满一个月的书籍。并且假设今天是2019-06-23。

在这里插入图片描述
其中:

  • Books表:book_id是主键;
  • Orders 表:order_id是主键,book_id 是Books表的外键。

解题思路:
(1)需要查询过去一年内订单总量少于10本,需要筛选出根本没有订单的书;
(2)不考虑上架不满一个月的书:应该直接通过where筛除,不符合条件的连null都不应该有,否则会混入结果中导致错误。

select a.book_id, name
from books a
left join orders b
on a.book_id = b.book_id and dispatch_date >= '2018-06-23'--,根据书的id连接两表,并剔除2018-06-23以前的信息
where available_from < '2019-05-23'--剔除上架不满一个月的书
group by a.book_id
having ifnull(sum(quantity), 0) < 10;--用ifnull是将没有订单的返回的null转变为0

猜你喜欢

转载自blog.csdn.net/Txixi/article/details/121949763
今日推荐