2017-04-07 65 views
0

我是Netezza的新手,需要計算具有非零密鑰的ID的數量。我的KEY是一個事務類型,我想返回已經有任何事務的ID的計數。基本上我想要一個非零密鑰的所有UID的計數。Netezza有條件地計算每個ID一個記錄

我的數據:

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

我想回到什麼:

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?

回答

0

我認爲你正在尋找一個條件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 
+0

哇,真是一個簡潔的方式來解決這個問題。在我的結果中,在我看來,這是給了一個沒有交易的UID數量。我想我需要'COUNT(DISTINCT CASE WHEN KEY!= 0 THEN UID END)AS UIDs_W_TRANS'。另外,您能否幫助我理解爲什麼我在本聲明中不需要ELSE子句? – Lenwood

+0

@Lenwood。 。 。是的,它應該是'<> 0'而不是'= 0'。 –