[英]MySQL Need to show 0 when no value in right hand table of join, with cumulative
我有一个表,其中列出了每月针对产品代码的销售数量列表,而另一个表中则列出了可以在销售月份之前或之后延长的月份列表。如果没有销售,我需要将结果显示为0在一个月中,并进行累加。 我尝试使用case,如果sales.sales为null,并且将其放为0,但这没有用,我仍然只有空白。
create table summary as (SELECT
q1.productid As productid,
q1.date AS Month_View,
q1.sales AS Monthly_Units_Sold,
(@runtot_sales := @runtot_sales + q1.sales) AS Cumulative_Sales
FROM
(SELECT
sales.productid,
dates.date,
if(sales.date is null,0,sales.sales) as sales
from
dates
left join sales on dates.date = sales.date
where
sales.productid = '$input1'
group by dates.date
ORDER BY date) AS q1);
";
尝试COALESCE()
函数返回一个列表的第一个非NULL值, 也可查看演示这里
CREATE TABLE summary AS
(SELECT
q1.productid AS productid,
q1.date AS Month_View,
q1.sales AS Monthly_Units_Sold,
(
@runtot_sales := @runtot_sales + q1.sales
) AS Cumulative_Sales
FROM
(SELECT
sales.productid,
dates.date,
COALESCE(sales.sales, 0) AS sales
FROM
dates
LEFT JOIN sales
ON dates.date = sales.date
WHERE sales.productid = '$input1'
GROUP BY dates.date
ORDER BY DATE) AS q1) ;
您滥用GROUP BY
,因此得到不确定的结果。 看到这个: http : //dev.mysql.com/doc/refman/5.5/en/group-by-extensions.html
如果按产品和日期汇总商品,则可能需要这样的内容。
SELECT sales.productid,
dates.date,
SUM(sales.sales) as sales
FROM dates
LEFT JOIN sales ON dates.date = sales.date
WHERE sales.productid = '$input1'
GROUP BY sales.productid, dates.date
ORDER BY /* i'm not sure what you're trying to do with the running total */
请注意, SUM(sales.sales)
正确处理了LEFT JOIN
的NULL值。 如果日期未加入销售行,则sales.sales将为NULL。
如果您要进行每月汇总,则需要的逻辑要比您需要的多。 参见以下文章: http ://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.