【问题标题】:Cannot nest aggregate operations - Teradata Case When无法嵌套聚合操作 - Teradata 案例
【发布时间】:2014-06-25 01:36:21
【问题描述】:

在我最近收到的 SO 帮助下,我设法在我的 SELECT 查询中使用以下 sn-p 获取数据:

COUNT(CASE WHEN CAST(EVENT_TIMESTAMP AS DATE) - CONTRACT_EFFECTIVE_DATE = 2 THEN 1 END) AS "2 day",

这产生了满足特定条件的事件的实例计数。

但我现在想计算与这些事件相关的人数(唯一电子邮件地址)。

我试过了:

COUNT(CASE WHEN CAST(EVENT_TIMESTAMP AS DATE) - CONTRACT_EFFECTIVE_DATE = 2 THEN COUNT(DISTINCT TmpNIMSalesForceDB.EMAIL) END) AS "2 day"

逻辑在我看来是正确的 - 如果案例的结果是 2,则计算该案例的不同电子邮件地址。

但似乎 SQL(或 Teradata)不喜欢以这种方式嵌套。生成的错误消息是“无法下一个聚合函数”。

我可以这样使用COUNT(DISTINCT吗?

【问题讨论】:

    标签: sql count case teradata


    【解决方案1】:

    你想要的表达式是一个条件count(distinct)

    COUNT(DISTINCT CASE WHEN CAST(EVENT_TIMESTAMP AS DATE) - CONTRACT_EFFECTIVE_DATE = 2
                        THEN TmpNIMSalesForceDB.EMAIL
                   END) AS "2 day"
    

    通过省略else 子句,当条件不满足时,值为NULL。因此,EMAIL 的不同值将被计算为条件。

    【讨论】:

    • 太棒了,非常感谢,真的很有帮助,我不知道今天没有 SO 我会在哪里。我只需要熟悉逻辑是如何构造的
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2020-06-12
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多