2016-06-24 17 views
0

特定のテーブルで特定のオブジェクトを閲覧したすべてのユーザーの合計数を調べようとしています。私はこれまで、オブジェクトによって離れてそれを壊し、クエリを持っている...Impala SQLステートメントの合計数の検索

select object, count(distinct user) 'c' from events e where (action = 'viewed') and object in ('car','truck') group by object, 'c'

出力は、次の...

car 92

truck 20

何のように見えます私は単純に番号112を出力することを望みます。どんな助けも素晴らしいだろう。

+1

イベントeから(count =(distinct user)) 'c'を選択した結果、(action = 'viewed')とobject ( 'car'、 'truck') '? – zedfoxus

+0

「108」。 Go figure – jiveturkey

+0

@jnbbender表現しようとしている合計は何ですか?おそらく、「108」が正解です。 – Grayson

答えて

1

ちょうどあなたが欲しいものを得るために、それを簡単にあなたの現在のクエリ

select sum(c) 
from 
(
    select object, count(distinct user) 'c' 
    from events e 
    where (action = 'viewed') and object in ('car','truck') 
    group by object, 'c' 
) tmp 
+0

これは良いです。醜いしかし良い。質問には一度も言及していませんが、クエリーはカスタムBuilderオブジェクトから作成されるため、このソリューションはすべての再書き込みから大きな時間を節約します。 – jiveturkey

0

周りsum()を置く:

select count(*) 
from events e 
where action = 'viewed' 
and object in ('car','truck') 

あなたがオブジェクトによって個別のユーザーをしたい場合は、この

select count(*) 
from events e 
where action = 'viewed' 
    and object in ('car','truck') 
    and ROW_NUMBER() OVER (PARTITION BY Object, User) = 1 
を行うことができます
+0

ここでの問題は「別個」です。このクエリからの答えは '151' – jiveturkey

+0

@ jnbbenderに戻りました。上の図のように、where節でウィンドウ関数を使って行うことができます。 – Hogan

関連する問題