0

私はpostgresにかなり慣れていないので、かなり難しいことで問題を抱えています。さらに、私は適切なエディターで作業していません。これは、何らかの形式の Web ベースのエディターです。それを考慮してください。

ここに私のクエリ:

select coalesce('user') as user_src,
       coalesce(root_domain(hostname), hostname, 'unknown') as web_domain,
       count (*) as nohits
from $log
where coalesce(root_domain(hostname), hostname, 'unknown') in
    (select coalesce(root_domain(hostname), hostname, 'unknown') as web_domain
          from $log
          group by web_domain
          limit 10
    ) 
group by user_src, web_domain
order by user_src, web_domain, nohits desc

しかし、結果は私が望むようには見えません。すべてのユーザー + 上位 10 の Web サイトが必要です。これで、すべてのユーザーと合計10 の Web サイトが表示され、すべてのユーザーに分割されます。-> 一部のユーザーは、トップ 10 のいずれにもアクセスしたことがないため、0 になります。

調べてくれてthx!

編集:それが私がそれを変換した方法です(機能していません-このエラー:エラー:列「ホスト名」が存在しません)

select  coalesce('user') as user_src,
        coalesce(root_domain(hostname), hostname, 'unknown') as web_domain,
        count (*) as nohits
from
    (select coalesce('user') as user_src,
            coalesce(root_domain(hostname), hostname, 'unknown') as web_domain,
            count (*) as nohits,
            rank() over (partition by coalesce('user') order by coalesce('user'), count (*) desc) as rank
    from $log
    group by user_src, web_domain) w
where rank <= 2
order by user_src, rank

それはうまくいくでしょう例:(「ホスト名」が存在することを確認するためだけに)

select  coalesce('user') as user_src,
        coalesce(root_domain(hostname), hostname, 'unknown') as web_domain,
        count (*) as nohits
from $log
group by user_src, web_domain
order by user_src, nohits
4

1 に答える 1