【问题标题】:Subtraction of two SELECT statements in SQL (redshift)SQL 中两个 SELECT 语句的减法(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

【问题讨论】:

    标签: sql group-by count amazon-redshift sql-null


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2014-09-05
        • 2010-11-24
        • 1970-01-01
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多