leetcode 1098. 小众书籍
筛选出过去一年中订单总量 少于10本 的 书籍 。
注意:不考虑 上架(available from)距今 不满一个月 的书籍。并且 假设今天是 2019-06-23 。
- 筛选过去一年,用左连接,on进行筛选,因为有一些书一本没卖,没有订单,左连接能够显示出来。
- 筛选过去一个月,用where,不能用on。因为用左连接时,on在进行筛选时,只能筛选右边的表,无法筛选左边的表。where可以把整行消除。
- 在进行求和时,用sum()<10,无法包含null值,因为null值无法进行比较。所以使用ifnull进行判断。
法一:
select t1.book_id,t1.name
from Books t1 left join Orders t2
on t1.book_id = t2.book_id
and datediff('2019-06-23',dispatch_date)<365
where datediff('2019-06-23',available_from)>30
group by t1.book_id
having ifnull(sum(t2.quantity),0)<10;
法二:
select t1.book_id,t1.name
from Books t1 left join Orders t2
on t1.book_id = t2.book_id
where datediff('2019-06-23',available_from)>30
group by t1.book_id
having sum(if(datediff('2019-06-23',dispatch_date)<365,t2.quantity,0))<10
;