繁体   English   中英

当连接的右表中无值时,MySQL需要显示0,并累积

[英]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) ;

MySQL COALESCE()函数

您滥用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM