首页 > 解决方案 > 在 PostgreSQL 的窗口函数中按降序聚合排序

问题描述

我有一个数据集,其中包含主变量的重复值,如下所示:

col1    col2    counts
110    False    1
111    False    2
111    False    1
112    True     3
112    False    2
112    False    1
113    False    1
114    False    1
115    False    2
115    False    1
116    False    1
117    False    1
118    False    4
118    False    3
118    False    2
118    False    1

我通过使用以下代码实现了这一点

SELECT DISTINCT ctm_nbr
,col1
,col2
,RANK () OVER (PARTITION BY col1 ORDER BY col2) AS counts
FROM my_table 
GROUP BY 1,2,3
ORDER BY ctm_nbr, row_numb DESC 

但是,需要对我想要的输出进行排序,以便counts降序但col1保持分区,以便我可以看到 col1 中的哪个值具有最高计数。像这样...

col1    col2    counts
118    False    4
118    False    3
118    False    2
118    False    1
112    True     3
112    False    2
112    False    1
115    False    2
115    False    1
111    False    2
111    False    1
110    False    1
113    False    1
114    False    1
116    False    1
117    False    1

我已经尝试了 final 子句的各种迭代,ORDER BY但不能完全产生我需要的输出。指导表示赞赏。

标签: sqlpostgresqlaggregate-functionswindow-functionsranking-functions

解决方案


您可以在order by. 我想你只是想要:

ORDER BY COUNT(*) OVER (PARTITION BY ctm_nbr) DESC,
         ctm_nbr,
         row_numb DESC 

这假设计数是 的最大值row_numb()。因此,您也可以将其表示为:

ORDER BY MAX(row_numb) OVER (PARTITION BY ctm_nbr) DESC,
         ctm_nbr,
         row_numb DESC 

推荐阅读