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
我是 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