2017-11-04 17 views
0

与えられる以下の表(それはセッションを持つユーザーアイテム閲覧履歴を記録)パーティションを持つクエリとカウント

create table view_log (
    server_time timestamp, 
    device char(2), 

    session_id char(10), 
    uid char(7), 
    item_id char(7) 
); 

私は次のコードが何をするかを理解しようとしています。..

create table coo_cs as 
select 
    item_id, 
    session_id, 
    count(distinct session_id)/(sum(count(distinct session_id)) over (partition by item_id)) cs 
from view_log 
group by item_id, session_id; 

私はpartitionの行を分解しようとしましたが、それは何をしているのかを理解するためにDISTINCT is not implemented for window functionsを出します。

私が理解し、基本的なpartitiongroup byが、上記のSQLの意味を理解することはできません。..

  • 編集テストのためではなく、大規模なデータがあります

...

http://pakdd2017.recobell.io/site_view_log_small.csv000.gz

+2

入力の小さなサブセットを提供した方が簡単になるでしょうデータと対応する結果セット –

+0

使用しているデータベースで質問にタグを付けます。 –

答えて

0

一部のデータベースでは、まだ窓関数としてcount(distinct)がサポートされていません。このクエリでは、count(distinct)に使用されているのと同じ列で集計しているため、count(distinct)は不要です。したがって、count(distinct session_id)は各行に1です。

あなたのクエリは、本質的である:

select item_id, session_id, 
     1.0/count(session_id) over (partition by item_id)) as cs 
from view_log 
group by item_id, session_id; 

あなたがitem_idのレベルの比率を望んでいた場合、私は驚くべきことではないので、意図したクエリは次のとおりです。

select item_id, count(distinct session_id), 
     count(distinct session_id) * 1.0/sum(count(distinct session_id)) over()) as cs 
from view_log 
group by item_id; 

もしそうなら、同等のロジックでサブクエリを使用することができます:

select vl.*, sum(numsession) over() as cs 
from (select item_id, count(distinct session_id) as numsessions 
     from view_log vl 
     group by item_id 
    ) vl; 
+0

申し訳ありません。同じ(session_id、item_id)の複数の行が存在する可能性があることを示すために、view_logテーブルに 'server_time'カラムを追加しました。私はあなたの答えに影響するかどうかはわかりません... – eugene

+0

@eugene。 。 。どういたしまして。 'group by'で使用されている列の' count(distinct) 'は、値がNULL(" 0 "を返す)でない限り、" 1 "を返します。 –

+0

答えをありがとう、サブクエリは同等の結果を与えるようです。それでも私はクエリの意図を理解していません。あなたのサブクエリは 'over(partition by)とgroup by 'を一緒に見ると、次に' group by'を次に 'partition by'によって適用することによって推論できます。そうだとすれば、 'group by 'によってすでにロールアップされているので、' partition by'のポイントは表示されません。私はそれが自分のSQLレベルではあまりにも複雑だと思います。 – eugene

関連する問題