Postgresql 按等级和值对结果排序

Postgresql 按等级和值对结果排序,postgresql,sql-order-by,Postgresql,Sql Order By,我有下面的查询,它看起来是最常用的应用程序,然后将消耗量最多的应用程序排名为15,然后按它排序 SELECT app, srcip, bandwidth FROM ( SELECT app,srcip,bandwidth, rank() OVER (partition BY app ORDER BY bandwidth DESC) AS xRank FROM (

我有下面的查询,它看起来是最常用的应用程序,然后将消耗量最多的应用程序排名为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
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
我曾尝试在子查询中按带宽、xRank排序,但没有正常工作。提前谢谢你的帮助

更新:我测试了@GorgonLinoff的答案,结果与第一次发布的结果相同,但如果我添加
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

我想你可能想要这样的东西。每个应用程序的前三名,应用程序按应用程序总带宽排序:

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;
选择应用程序、SRIP、带宽
从(选择应用程序、SRIP、,
和(合并(sentbyte,0)+合并(rcvdbyte,0))作为带宽,
(按应用程序顺序按和(合并(sentbyte,0)+合并(rcvdbyte,0))描述上的行数()
)作为xrank,
sum(sum(合并(sentbyte,0)+合并(rcvdbyte,0)))作为appbandwidth(按应用划分)
从$log
其中$filter和logid_to_int(logid)不在(4,7,14)中
按应用分组,srcip
具有和(合并(sentbyte,0)+合并(rcvdbyte,0))>0的
)

在外部查询中,
orderbybandwidth
如何?如果你想在下一步添加它
WHERE xrank<15
我得到我在问题上添加的第二个结果。我想我最好将结果添加到我的问题中。。。我无法在答案上正确地编排格式。
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;