簡體   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