Netezza 有条件地为每个 ID 计算一条记录

Netezza conditionally count one record per ID

我是 Netezza 新手,需要计算具有非零密钥的 ID 的数量。我的 KEY 是一种交易类型,我想 return 统计有过任何交易的 ID。基本上我想要计算所有具有非零键的 UID。

我的数据:

SRC UID KEY ...
A   118 3   ...
A   517 0   ...
A   517 1   ...
A   517 4   ...
B   623 4   ...
C   972 0   ...
C   972 0   ...

我想要什么return:

SOURCE  UIDs    UIDs_W_TRANS
A       2       2
B       1       1
C       1       0

这是我的代码:

SELECT
    SRC AS SOURCE,
    COUNT(DISTINCT(UID)) AS UIDs,
    SUM(CASE WHEN KEY = 0 THEN 0 ELSE 1) AS UIDs_W_TRANS

FROM
    DATABASE

GROUP BY
    UID,
    SOURCE

我回来的是

SOURCE  UIDs    UIDs_W_TRANS
A       2       3
B       1       1
C       1       0

您可以看到我的查询正在计算每个非零 KEY。我已经尝试了上述查询的多种变体,但没有什么能让我更接近。我如何只计算每个 UID 1 个非零 KEY?

我认为您正在寻找有条件的 count(distinct):

SELECT SRC AS SOURCE,
       COUNT(DISTINCT(UID)) AS UIDs,
       COUNT(DISTINCT CASE WHEN KEY <> 0 THEN UID END) AS UIDs_W_TRANS
FROM DATABASE
GROUP BY SOURCE