[英]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.