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)的主要内容,如果未能解决你的问题,请参考以下文章