筛选出过去一年中订单总量 少于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 ;