SQL 中两个 SELECT 语句的减法(redshift)

Posted

技术标签:

【中文标题】SQL 中两个 SELECT 语句的减法(redshift)【英文标题】:Subtraction of two SELECT statements in SQL (redshift) 【发布时间】:2020-04-13 14:19:49 【问题描述】:

有人可以解释为什么以下不起作用吗?

((SELECT COUNT(*) FROM Table1) - (SELECT Count(Metric) FROM Table1)) as X

Count(*) 将为我提供表中的所有行,而 Count(Metric) 将为我提供 Metric 列中的非空值。因此,它们之间的差异将为我提供 Metric 列中空值的数量,并且我已将此列标记为 X。我只想要列 X 中两者之间的差异,但不确定为什么它不起作用。

顺便说一句,我知道我可以通过以下方式让它工作:

SELECT COUNT(*) as a, count(metric) as b, COUNT(*)-COUNT(metric) as c

【问题讨论】:

【参考方案1】:

您需要select 结果:

SELECT ((SELECT COUNT(*) FROM Table1) - (SELECT Count(Metric) FROM Table1)) as X

但使用条件聚合更简单:

SELECT SUM(CASE WHEN Metrics IS NULL THEN 1 ELSE 0 END) X FROM table1

【讨论】:

【参考方案2】:

SELECT 查询需要以 SELECT 开头(或者 WITH 或括号,如果查询是带有集合运算符的复合查询,例如 UNION ALL)。

一种方法是:

SELECT ((SELECT COUNT(*) FROM Table1) - (SELECT Count(Metric) FROM Table1)) as X

更好的方法是:

SELECT COUNT(*) - Count(Metric) as X
FROM Table1

【讨论】:

谢谢!这很有意义:)【参考方案3】:

不确定 amazon-redshift,但在标准 SQL 中,我只会计算字段为空的记录,而不是计算所有不为空的减号。

SELECT COUNT(*) FROM Table1 WHERE Metric IS NULL;

【讨论】:

以上是关于SQL 中两个 SELECT 语句的减法(redshift)的主要内容,如果未能解决你的问题,请参考以下文章

SQL连接两个SELECT语句的麻烦

PL/SQL 在 CASE 语句中返回一个列表

用select语句把两个表合一块

SQL语句中“与‘

sql语句:将两个查询结果关联显示

sql语句:一个表和另外两个表的关联语句