2017-04-07 4 views
0

Netezzaを初めて使い、ゼロ以外のキーを持つIDの数を数える必要があります。私のKEYはトランザクションタイプであり、トランザクションを持っているIDの数を返したいと思います。基本的には、ゼロ以外のキーを持つすべてのUIDの数を求めます。NetezzaはIDごとに1レコードを条件付きでカウントします

マイデータ:私は返すようにしたいどのような

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 
です

私のクエリがゼロ以外のキーをすべてカウントしていることがわかります。私は上記のクエリにいくつかのバリエーションを試しましたが、何も私を近づけませんでした。 UIDごとに0以外のKEYを1つだけカウントするにはどうすればよいですか?

答えて

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をカウントしているように見えます。私は 'UIDs_W_TRANS'として' COUNT(DISTINCT CASE WHEN KEY!= 0 THEN UID END)したいと思います。また、なぜこの文でELSE句が必要ないのか理解できますか? @Lenwood。 – Lenwood

+0

。 。はい、 '= 0'ではなく' <> 0'でなければなりません。 –

関連する問題