SELECT 语句中的 NULL AS OUT
NULL AS OUT in SELECT statements
我正在尝试解决这个练习:
假设每天可以为每个收款点登记任意次数的收款 (inc) 和支出 (out) [即code列为主键],显示一个table,每个采集点的每个运营日期对应一行。
结果集:点数、日期、每天总支出(out)、每天总收入(inc)。
缺失值被视为 NULL。
经过几个小时的努力,我在网上找到了这个解决方案:
SELECT X.POINT,X.DATE,SUM(OUT),SUM(INC) FROM (
SELECT I.POINT,I.DATE,NULL AS OUT, SUM(I.INC) AS INC FROM INCOME I
GROUP BY I.POINT,I.DATE
UNION
SELECT O.POINT,O.DATE,SUM(O.OUT) AS OUT , NULL AS INC FROM OUTCOME O
GROUP BY O.POINT,O.DATE) AS X
GROUP BY POINT,DATE
我试图了解这是如何工作的。我用谷歌搜索了“NULL AS OUT”的所有变体,但找不到任何 explanation/concept。所有结果都指向存储过程,这不是我想的那样。
有人可以向我解释这些带有“AS OUT”的行是如何工作的吗?
SELECT I.POINT,I.DATE,NULL AS OUT, SUM(I.INC) AS INC FROM INCOME I
GROUP BY I.POINT,I.DATE
UNION
SELECT O.POINT,O.DATE,SUM(O.OUT) AS OUT , NULL AS INC FROM OUTCOME O
out
可能是一个不幸的名字,但除此之外,那里没有什么神奇的东西。
"null" 是 null
.
的字面值
“as out”为选定的 null
.
分配一个列别名
在句法上,这等同于具有任何其他别名的任何其他文字值,例如 SELECT 'some_varchar_literal' AS some_alias
或 SELECT 123 AS numeric_alias
。
复制评论作为答案以将其标记为有效
这是 SQL 服务器还是 mysql。根据我的理解,我认为 out 表示 null 指的是名为 OUT 的列,基本上是列的别名。收入 table 不会有结果,结果 table 不会有收入。因此,在 select 语句中,各自的值都标记为空值(NULL AS OUT & NULL AS INC)。当您对这些列执行聚合时,空值将被忽略。
您可以使用 NULL,因为当您遇到类似的联合语句时,两个 table 之一没有列。在这种情况下,您可以将这个缺失的列创建为虚拟列并在您的代码中使用它。
我正在尝试解决这个练习:
假设每天可以为每个收款点登记任意次数的收款 (inc) 和支出 (out) [即code列为主键],显示一个table,每个采集点的每个运营日期对应一行。 结果集:点数、日期、每天总支出(out)、每天总收入(inc)。 缺失值被视为 NULL。
经过几个小时的努力,我在网上找到了这个解决方案:
SELECT X.POINT,X.DATE,SUM(OUT),SUM(INC) FROM (
SELECT I.POINT,I.DATE,NULL AS OUT, SUM(I.INC) AS INC FROM INCOME I
GROUP BY I.POINT,I.DATE
UNION
SELECT O.POINT,O.DATE,SUM(O.OUT) AS OUT , NULL AS INC FROM OUTCOME O
GROUP BY O.POINT,O.DATE) AS X
GROUP BY POINT,DATE
我试图了解这是如何工作的。我用谷歌搜索了“NULL AS OUT”的所有变体,但找不到任何 explanation/concept。所有结果都指向存储过程,这不是我想的那样。
有人可以向我解释这些带有“AS OUT”的行是如何工作的吗?
SELECT I.POINT,I.DATE,NULL AS OUT, SUM(I.INC) AS INC FROM INCOME I
GROUP BY I.POINT,I.DATE
UNION
SELECT O.POINT,O.DATE,SUM(O.OUT) AS OUT , NULL AS INC FROM OUTCOME O
out
可能是一个不幸的名字,但除此之外,那里没有什么神奇的东西。
"null" 是 null
.
的字面值
“as out”为选定的 null
.
在句法上,这等同于具有任何其他别名的任何其他文字值,例如 SELECT 'some_varchar_literal' AS some_alias
或 SELECT 123 AS numeric_alias
。
复制评论作为答案以将其标记为有效
这是 SQL 服务器还是 mysql。根据我的理解,我认为 out 表示 null 指的是名为 OUT 的列,基本上是列的别名。收入 table 不会有结果,结果 table 不会有收入。因此,在 select 语句中,各自的值都标记为空值(NULL AS OUT & NULL AS INC)。当您对这些列执行聚合时,空值将被忽略。
您可以使用 NULL,因为当您遇到类似的联合语句时,两个 table 之一没有列。在这种情况下,您可以将这个缺失的列创建为虚拟列并在您的代码中使用它。