私は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