我正在学习sql嵌套语句,但遇到了一个问题。我想做的是使用图书ID获取上个月图书的总销量,并将其与本月的销量进行比较。所有的购买都记录在一个book\u download\u log表中,表的结构如下
Timestamp Book ID Price
May 1st 10 100
May 2nd 20 200
May 3rd 30 300
这是我当前的查询
SELECT b.book_id, CONCAT(FORMAT(((this_month/last_month)*100)-100,2),'%') AS Diff, this_month, last_month
FROM
book_download_log b
JOIN
(SELECT count(*) AS last_month FROM
book_download_log b
WHERE b.book_price > 0 AND
date(b.timestamp) BETWEEN '2018-04-01' AND '2018-04-08') t1
JOIN
(SELECT count(*) AS this_month FROM
book_download_log b
WHERE b.book_price > 0 AND
date(b.timestamp) BETWEEN '2018-05-01' AND '2018-05-08') t2
GROUP BY b.book_id
ORDER BY Diff Desc
我成功地做的是提取这段时间内购买的所有书籍的总计数,而不是单个书籍购买的计数。下面是我现在的结果
Book ID Diff This Month Last Month
1 17.6% 652 577
69 17.6% 652 577
102 17.6% 652 577
我需要编辑什么来显示这两个时期的单个图书销量?
2条答案
按热度按时间wnavrhmk1#
您可以选择:
这也适用于跨年(例如,你在一月,上个月是另一年),如果你在数据库中有当前日期之后的数据(例如,你在一月,并且你在数据库中存储了同一年二月的数据,则可能发生这种情况)
请参见此处的sql fiddle来测试它:http://sqlfiddle.com/#!9月4日
dldeef672#
首先,你要按月份分组购买。我选择了摘录(从“2017-06-15”开始的月份)。然后使用sum(),而不是count()获取每个月的所有购买量。所以你应该有这样的东西:
然后提取上个月和本月。