在psql中选择每组前5名得分结果
我需要一些关于如何选择每个客户的前5个最关键服务器的帮助 目前我有一个select语句,它返回所有机器的主机名、SystemID、Customer和Critical值。下一步我需要做的是,为每个客户只选择最关键的前5名最关键的最高评分 我当前的select语句如下所示:在psql中选择每组前5名得分结果,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我需要一些关于如何选择每个客户的前5个最关键服务器的帮助 目前我有一个select语句,它返回所有机器的主机名、SystemID、Customer和Critical值。下一步我需要做的是,为每个客户只选择最关键的前5名最关键的最高评分 我当前的select语句如下所示: SELECT COALESCE(rhss_py_results.Hostname, sid_py_results.Name) AS Hostname, COALESCE(rhss_py_results.SystemID, sec
SELECT COALESCE(rhss_py_results.Hostname, sid_py_results.Name) AS Hostname, COALESCE(rhss_py_results.SystemID, security_scores.SystemID) AS SystemID, Customer, Critical
FROM rhss_py_results
INNER JOIN sid_py_results
ON rhss_py_results.hostname = sid_py_results.Name
INNER JOIN Customers
ON sid_py_results.SecurityDomain = Customers.SecurityDomain
INNER JOIN security_scores
ON rhss_py_results.SystemID=security_scores.SystemID
ORDER BY Customer;
它会返回与此类似的内容:由于隐私而导致的数据更改
hostname | systemid | customer | critical
-------------------+------------+--------------------------+----------
aaa-aaaa_aaaa | 1000000024 | Anna | 48
aaa-aaa3-aaa1 | 1000000038 | Anna | 5
aaaaaa001 | 1000000013 | Kalle | 10
aaaaaa002 | 1000000043 | Kalle | 1
aaaaaa005 | 1000000087 | Pelle | 5
bbbbbb0010 | 1000000003 | Pelle | 0
cccccc0001 | 1000000029 | Sara | 0
ddd-dddd-c001 | 1000000063 | Anna | 26
ddd-dddd-c002 | 1000000064 | Anna | 24
ddd-dddd-c003 | 1000000012 | Anna | 5
fff-ffff-f001 | 1000000095 | Anna | 13
gggggg0001 | 1000000077 | Sara | 0
gggggg0002 | 1000000040 | Pelle | 0
gggggg0003 | 1000000039 | Pelle | 1
mmmmmm033 | 1000000047 | Kalle | 31
mmmmmm034 | 1000000045 | Kalle | 37
mmmmmm036 | 1000000046 | Pelle | 3
mmmmmm037 | 1000000082 | Pelle | 3
mmmmmm045 | 1000000091 | Håkan | 0
一些客户只有一台服务器,其他客户只有15台,如果一个客户只有一台服务器,那么只列出一台就足够了。
如果一个客户有多台服务器的前5个关键值相同,则根据主机名返回最相关的5个即可
我有超过32个不同的客户,这个数字将来可能会有所不同
以下结果应为最终产品:
hostname | systemid | customer | critical
-------------------+------------+--------------------------+----------
aaa-aaaa_aaaa | 1000000024 | Anna | 48
ddd-dddd-c001 | 1000000063 | Anna | 26
ddd-dddd-c002 | 1000000064 | Anna | 24
fff-ffff-f001 | 1000000095 | Anna | 13
aaa-aaa3-aaa1 | 1000000038 | Anna | 5
mmmmmm045 | 1000000091 | Håkan | 0
mmmmmm034 | 1000000045 | Kalle | 37
mmmmmm033 | 1000000047 | Kalle | 31
aaaaaa001 | 1000000013 | Kalle | 10
aaaaaa002 | 1000000043 | Kalle | 1
aaaaaa005 | 1000000087 | Pelle | 5
mmmmmm036 | 1000000046 | Pelle | 3
mmmmmm037 | 1000000082 | Pelle | 3
gggggg0003 | 1000000039 | Pelle | 1
bbbbbb0010 | 1000000003 | Pelle | 0
cccccc0001 | 1000000029 | Sara | 0
gggggg0001 | 1000000077 | Sara | 0
我已经阅读了下面的文章,但不明白如何将其应用到我自己的查询中,因为我对数据库非常陌生
有人能帮我解决这个问题吗
//安布罗斯按关键描述使用顺序
使用行数函数
SELECT *
FROM
(SELECT (row_number() over (partition BY Customer
ORDER BY COALESCE(rhss_py_results.SystemID, security_scores.SystemID) DESC)) AS sno,
COALESCE(rhss_py_results.Hostname, sid_py_results.Name) AS Hostname,
COALESCE(rhss_py_results.SystemID, security_scores.SystemID) AS SystemID,
Customer,
Critical
FROM rhss_py_results
INNER JOIN sid_py_results ON rhss_py_results.hostname = sid_py_results.Name
INNER JOIN Customers ON sid_py_results.SecurityDomain = Customers.SecurityDomain
INNER JOIN security_scores ON rhss_py_results.SystemID=security_scores.SystemID
ORDER BY Customer) AS t
WHERE sno<=5;
这一个根本没有给前五名,只是命令他们。。。。因此,这不是我所问的,这一点很接近,但并不完全符合它的要求。老实说,我不知道它能做什么。因为它不会返回前五名,也不会返回后五名。它返回每个类别中的5个,但我不知道这5个类别有什么共同点。比如说,如果Pelly的服务器具有关键的0、0、0、0、0、0、0、1、2、4、11、12、15、18、28、31、31、31。。。它返回的是0,0,0,4,15,不是确切的数字,但我希望你明白我的意思:我在你原来的帖子中编辑了一些错误,没有按正确的内容排序,还有一个小的打字错误。它现在运行正常,我会接受你的回答。谢谢好啊谢谢你的评论
SELECT *
FROM
(SELECT (row_number() over (partition BY Customer
ORDER BY COALESCE(rhss_py_results.SystemID, security_scores.SystemID) DESC)) AS sno,
COALESCE(rhss_py_results.Hostname, sid_py_results.Name) AS Hostname,
COALESCE(rhss_py_results.SystemID, security_scores.SystemID) AS SystemID,
Customer,
Critical
FROM rhss_py_results
INNER JOIN sid_py_results ON rhss_py_results.hostname = sid_py_results.Name
INNER JOIN Customers ON sid_py_results.SecurityDomain = Customers.SecurityDomain
INNER JOIN security_scores ON rhss_py_results.SystemID=security_scores.SystemID
ORDER BY Customer) AS t
WHERE sno<=5;