mysql - 如果第二个选择为空,如何忽略?
问题描述
我的目标是计算账户突变(Credit - Debit)
这是我当前的 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 BETWEEN "2020-11-01" AND "2020-11-30" AND Source=99005571818061833)
预期结果是: 返回账户突变值。
实际结果是: null
问题是如果第 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
返回值将为空,因为 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。
推荐阅读
- vb.net - 为什么在 VB.Net 中定义属性时使用 GET & SET 方法?
- opencv - 在 Ubuntu 20.04 上作为服务运行时,Opencv 无法打开摄像头设备
- javascript - 如何在没有浏览器或节点 js 的情况下运行 Javascript?
- c# - 领域如何关闭和阅读
- sql - SELECT 或 JOIN 使用同一列两次
- python - 什么是 JSON 文件以及为什么它们在 python 中如此有用
- reactjs - 为什么 Cloud Firestore 不允许通过 Firebase 身份验证验证进行访问?
- javascript - Puppeteer:框架的内容无法读取 null 的属性
- sql - 如何使用 re2 正则表达式提取单个句点之间的所有文本(即忽略`...`)?
- php - 如何在php中测试播放声音