在选择中进行MySQL减法操作

3
例如,我有以下表格:
date | id | num
01-01 | a | 10
01-02 | a | 14
01-02 | b | 2
01-03 | a | 19
01-03 | b | 5
01-04 | a | 13

我想从a中减去bnum,即结果将为:
01-01 | 10    //10
01-02 | 12    //14-2
01-03 | 14    //19-5
01-04 | 13    //13

我尝试了以下SQL查询语句,但如果一个日期上没有b的记录,它会返回\N
SELECT tba.date, numall-numout
FROM (
    SELECT date, num AS numall
    FROM tb
    WHERE id = "a"
) tba
LEFT JOIN (
    SELECT date, num AS numout
    FROM tb
    WHERE id = "b"
) tbb
ON tba.date = tbb.date
2个回答

7
如果没有匹配到B,左连接将返回null,这意味着您正在执行。
numall - NULL

这会导致一个NULL值。要解决这个问题,你需要进行以下操作:
numall - COALESCE(numout, 0)

强制将不存在的日期“b”设为零。


这是颠覆 COALESCE 设计初衷的做法,避免使用专为此工作而设计的 IFNULL。更好的解决方案是 `numall - ifnull(numout, 0),因为这样更清楚地表明了正在发生的事情。 - D Mac
颠覆怎么做?coalesce只是ifnull()的多参数版本。 - Marc B

0

使用 SELECT tba.date, numall-ISNULL(numout,0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接