我正在制作一些条形图来计算日,月,年的物品销售量。我遇到的问题是我的简单MySQL查询只返回有数值计数的计数。它不会奇迹般地填写日期不存在的日期和物品销售量= 0。例如,当试图填充表格时,这会导致我出现问题,因为某一年中的所有星期都没有出现,只有出售物品的那几个星期才出现。是当给定日期增量的计数为0时,如何处理在MySQL中按日期计算项目?
我的表和字段如下:
items table: account_id and item_id
// table keeping track of owners' items
items_purchased table: purchaser_account_id, item_id, purchase_date
// table keeping track of purchases by other users
calendar table: datefield
//table with all the dates incremented every day for many years
这里的第一个查询我指的是上面:
SELECT COUNT(*) as item_sales, DATE(purchase_date) as date
FROM items_purchased join items on items_purchased.item_id=items.item_id
where items.account_id=125
GROUP BY DATE(purchase_date)
我读过,我应该加入日历表与表计数发生的地方。我已经做了,但现在我不能得到第一个查询发挥好这个第二次查询,因为在第一次查询的连接从查询结果,其中项目销售0
这里这就需要第二次查询消除日期与第一个查询合并莫名其妙地产生我正在寻找的结果:
SELECT calendar.datefield AS date, IFNULL(SUM(purchaseyesno),0) AS item_sales
FROM items_purchased join items on items_purchased.item_id=items.item_id
RIGHT JOIN calendar ON (DATE(items_purchased.purchase_date) = calendar.datefield)
WHERE (calendar.datefield BETWEEN (SELECT MIN(DATE(purchase_date))
FROM items_purchased) AND (SELECT MAX(DATE(purchase_date)) FROM items_purchased))
GROUP BY date
// this lists the sales/day
// to make it per week, change the group by to this: GROUP BY week(date)
这第二查询的失败在于它不account_id
算item_sales(人试图将项目出售给purchaser_account_id
用户)。第一个查询确实存在,但它没有销售项目= 0的所有日期。所以是的,令人沮丧。
以下是我想要得到的数据看(注:这是什么ACCOUNT_ID = 125已售出,其他的人很多都在这段时间内不同的号码):
2012-01-01 1
2012-01-08 1
2012-01-15 0
2012-01-22 2
2012-01-29 0
这里是一号询问目前看起来像:
2012-01-01 1
2012-01-08 1
2012-01-22 2
如果有人可以提供一些建议,我将非常感激。
如何在group by子句中添加account_id? – 2012-03-22 00:34:54
你是什么意思“,由'account_id'选择'item_sales'?如果你在添加什么'那里items.account_id = 125'从第一个查询,为喜,如果'where'在第二次的查询条件? – 2012-03-22 00:36:22
化妆一个'和'到那个'where',那么结果仅限于'account_id = 125'存在的日期,即所有的0个销售日期都被丢失了,dangit! – 2012-03-22 00:39:34