单列postgresql的组输出
首先,我是一个彻头彻尾的SQLNoob——提前感谢您提供的任何帮助 我有一个FortiAnalyzer,它使用Postgres DB存储防火墙日志。然后使用分析仪报告使用情况等 基本上,我需要编写一个自定义查询,通过每个用户前10个网站/目的地的带宽显示前10个用户 我可以从单元中获取所有相关信息,但无法正确格式化输出 我会很高兴的输出显示用户名10次与排名前10位的网站旁边的用户名。然而,头奖是在A列中只显示一次用户名,然后在B列和C列中分别显示目标地址和使用的带宽 以下是我到目前为止提出的问题:单列postgresql的组输出,postgresql,filter,group-by,Postgresql,Filter,Group By,首先,我是一个彻头彻尾的SQLNoob——提前感谢您提供的任何帮助 我有一个FortiAnalyzer,它使用Postgres DB存储防火墙日志。然后使用分析仪报告使用情况等 基本上,我需要编写一个自定义查询,通过每个用户前10个网站/目的地的带宽显示前10个用户 我可以从单元中获取所有相关信息,但无法正确格式化输出 我会很高兴的输出显示用户名10次与排名前10位的网站旁边的用户名。然而,头奖是在A列中只显示一次用户名,然后在B列和C列中分别显示目标地址和使用的带宽 以下是我到目前为止提出的问
select coalesce(nullifna(`user`), `src`) as user_src,
coalesce(hostname, dstname, 'unknown') as web_site,
sum(rcvd + sent)/1024 as bandwidth from $log
where $filter and user is not null and status in ('passthrough', 'filtered')
group by `user_src` , web_site order by user_src desc
一旦查询链接到报表图表,我就可以用x值限制输出。例如,我可以将此限制为将user_src列限制为100,即10个用户,每个用户有10个输出
我希望你明白这一点。。。如果没有,我会尽力回答任何问题。我从网站上聚合的表开始,用户级。相比之下,要为排名前Y的网站找到排名前X的用户并不困难。您需要使用函数来获得所需的结果 样本数据:
create table test (web_site varchar, user_src varchar, bandwidth numeric);
insert into test values
('a','s1',18),
('b','s1',12),
('c','s1',13),
('d','s2',14),
('e','s2',15),
('f','s2',16),
('g','s3',17),
('h','s3',18),
('i','s3',19)
;
为排名前Y的用户获取排名前X的网站:
with cte as (
select
user_src,
web_site,
bandwidth,
dense_rank() over(order by site_bandwidth desc) as user_rank,
dense_rank() over(partition by user_src order by bandwidth desc) as website_rank
from
test
join (select user_src, sum(bandwidth) site_bandwidth from test group by user_src) a using (user_src)
)
select
*
from
cte
where
user_rank <= 2
and website_rank <=2
order by
user_rank,
website_rank
给我们举个具体的例子。是一个很好的地方来建立这样的。你可以粘贴你在这里得到的链接,而无需登录。格式问题最好留给演示层处理。