题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