我有以下查询,它查找最常用的应用程序,然后将消耗量增加到15,然后按顺序排序。
SELECT app,
srcip,
bandwidth
FROM (
SELECT app,srcip,bandwidth,
rank() OVER (partition BY app ORDER BY bandwidth DESC) AS xRank
FROM (
SELECT app,
srcip,
Sum(COALESCE(sentbyte, 0)+COALESCE(rcvdbyte, 0)) AS bandwidth
FROM $log
WHERE $filter
AND Logid_to_int(logid) NOT IN (4,
7,
14)
GROUP BY app,
srcip
HAVING Sum(COALESCE(sentbyte, 0)+COALESCE(rcvdbyte, 0))>0
ORDER BY bandwidth DESC) dat) sub
WHERE xRank < 15
此查询获取我需要但未按正确顺序排列的数据。这是我得到的一个例子。
app srcip bandwidth
0/0/icmp 132.245.18.194 1,080
0/0/icmp 40.96.0.98 840
0/0/icmp 40.96.0.114 600
0/0/icmp 132.245.13.210 360
但是,使用最多的应用程序是其他应用程序。
app srcip bandwidth
HTTP.BROWSER_Chrome 192.168.1.241 582,191,297
HTTP.BROWSER_Chrome 192.168.1.16 495,352,897
MS.Windows.Update 192.168.1.125 415,221,314
POP3 192.168.1.160 109,979,690
HTTPS.BROWSER 192.168.1.240 96,237,582
我想首先按照使用大部分带宽的应用程序进行排序,然后将其中的15个排名。这是一个例子,但只有3个排名。
app srcip bandwidth
HTTP.BROWSER_Chrome 192.168.1.241 582,191,297
HTTP.BROWSER_Chrome 192.168.1.16 495,352,897
HTTP.BROWSER_Chrome 192.168.1.16 89,369,142
MS.Windows.Update 192.168.1.125 415,221,314
MS.Windows.Update 192.168.1.160 109,979,690
MS.Windows.Update 192.168.1.240 96,237,582
我已尝试将ORDER BY带宽,xRank放在子查询中,但它没有正常工作。感谢您的帮助。
更新:我测试了@GorgonLinoff的答案,我得到的结果与第1张相同,但如果我添加DESC
,我会得到以下内容。它现在被最常用的应用程序正确订购,但每个应用程序中的等级的带宽顺序仍然无序。
app srcip bandwidth
HTTP.BROWSER_Chrome 192.168.1.241 582,191,297
HTTP.BROWSER_Chrome 192.168.1.101 89,369,142
HTTP.BROWSER_Chrome 192.168.1.16 495,352,897
HTTPS.BROWSER 192.168.1.12 69,579,488
HTTPS.BROWSER 192.168.1.240 96,237,582
HTTPS.BROWSER 192.168.1.241 84,061,350
答案 0 :(得分:0)
我想你可能想要这样的东西。 。 。每个应用程序的前三名,应用程序按应用程序带宽排序:
SELECT app, srcip, bandwidth
FROM (SELECT app, srcip,
Sum(COALESCE(sentbyte, 0)+COALESCE(rcvdbyte, 0)) AS bandwidth,
row_number() over (partition by app order by Sum(COALESCE(sentbyte, 0)+COALESCE(rcvdbyte, 0)) desc
) as xrank,
sum(Sum(COALESCE(sentbyte, 0)+COALESCE(rcvdbyte, 0))) over (partition by app) as appbandwidth
FROM $log
WHERE $filter AND logid_to_int(logid) NOT IN (4, 7, 14)
GROUP BY app, srcip
HAVING Sum(COALESCE(sentbyte, 0)+COALESCE(rcvdbyte, 0)) > 0
) s
WHERE xrank <= 3
order by appbandwidth;