你需要写一段 SQL 命令,筛选出过去一年中订单总量 少于10本 的 书籍 。
注意:不考虑 上架(available from)距今 不满一个月 的书籍。并且 假设今天是 2019-06-23 。
SELECT b.book_id, name
FROM Books AS b
LEFT JOIN Orders AS o
ON b.book_id = o.book_id
WHERE available_from < '2019-05-23'
GROUP BY b.book_id
HAVING SUM(CASE WHEN DATEDIFF('2019-06-23', dispatch_date) <= 365 THEN quantity ELSE 0 END) < 10
这道题其实我不解的在于语句的分布排版,其实每条都没有什么难度,关键在于怎么去拼凑。
首先,
WHERE available_from < '2019-05-23'
排除大条件
其次,
GROUP BY b.book_id
HAVING SUM(CASE WHEN DATEDIFF('2019-06-23', dispatch_date) <= 365 THEN quantity ELSE 0 END) < 10
这里用了case when我没想到,就是如果在一年内就计数quantity,没有就属于0.