Mysql 如果second select为空,如何忽略?
我的目标是计算账户突变(借贷) 这是我当前的SQL语句:Mysql 如果second select为空,如何忽略?,mysql,sql,Mysql,Sql,我的目标是计算账户突变(借贷) 这是我当前的SQL语句: SELECT (SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833) - (SELECT sum(Transaction_Value) FROM transactions WHERE Date
SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Source=99005571818061833)
预期结果是:
返回帐户值
实际结果是:
空的
问题是,如果第4行没有找到行,则无论第2行是否返回值,它都将返回null
例如,如果我们对此表数据运行SQL语句:
ID Date Source Destination Transaction_Value
168 2020-11-24 SETORAN TUNAI 99005571818061833 1000000.0000
169 2020-11-24 98993563492155716 98993563492155717 1000.0000
返回值将为null,因为SQL语句未找到Source==“99005571818061833”的行。我是SQL新手。这并不意味着有效,如果你有一个更有效的方式和解释的答案,请随意回答。我将把它标记为答案 答案是:
SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
IFNULL((SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN 2020-11-01 AND 2020-11-30 AND Source=99005571818061833), 0)
解释如下:
结果表明,如果用null减去一个数字,返回值将为null
比如说
SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
null
预期结果将为空
所以。。。从逻辑上讲,如果第4行返回null,则应将其更改为0。用户条件聚合如下:
SELECT sum(CASE WHEN Destination = 99005571818061833 THEN Transaction_Value
WHEN Source = 99005571818061833 THEN -Transaction_Value
ELSE 0
END)
FROM transactions
WHERE Date BETWEEN 2020-11-01' AND '2020-11-30' AND
99005571818061833 IN (Source, Destination)
您应该考虑源或目标为空。@P.Salmon您的意思是选择结果=>null还是防止目标为空?我喜欢您只使用1 FROM,我认为这是一个更好的解决方案。但是,我尝试对不存在的帐号运行此操作,它返回的值为
1000000.0000
。我将尝试调整此查询。我发现了问题。我试图查询不存在的账号,例如SELECT*FROM bankaccount.transactions,其中Destination=99005571818061836代码>此查询返回目的地===99005571818061833
的值。目标的数据类型为CHAR(17)。我认为这是根本问题。我会查查查查的。谢谢。这是因为我没有添加“”,例如SELECT*FROM bankaccount.transactions,其中Destination=“99005571818061836”
这将返回null。