首页 > 解决方案 > 加入 2 个表给出空结果

问题描述

我想合并这两个表。

销售表

在此处输入图像描述

费用表

在此处输入图像描述

这是我将它们组合在一起的代码:

SELECT sl.month, sl.sumnet, ex.sumexp, (sl.sumnet-ex.sumexp) AS profit
FROM
    (SELECT date, DATE_FORMAT(date,'%m%Y') AS date_id, 
            DATE_FORMAT(date,'%b') AS month, 
            YEAR(date) AS year, SUM(net_sales) AS sumnet 
    FROM sales 
    GROUP BY month) sl
LEFT JOIN 
        (SELECT date, DATE_FORMAT(date,'%m%Y') AS date_id, 
                DATE_FORMAT(date,'%b') AS month, 
                YEAR(date) AS year, SUM(total) as sumexp 
        FROM expense 
        GROUP BY month) ex 
    ON sl.date_id = ex.date_id 
WHERE sl.year = '2021'
ORDER BY sl.date_id ASC

我只想显示 2021 年的结果,但 11 月显示NULLsumexpprofit(见下文)。我如何解决它?

在此处输入图像描述

标签: mysqlleft-join

解决方案


可能的答案,你必须照顾nulls

select
 s.date_id,
 s.`month` ,
 s.`year` ,
 sum(s.sumnet),
 sum(distinct coalesce(e.sumexp,0)),
 sum(s.sumnet) - sum(distinct coalesce(e.sumexp,0)) 
from sales as s
left join expanse as e on s.date_id = e.date_id and s.`month` = e.`month` and s.`year` = e.`year`
group by date_id, `month` , `year`;

并根据您的愿望进行过滤。


推荐阅读