PostgreSQL中按降序聚合的窗口函数

PostgreSQL中按降序聚合的窗口函数,sql,postgresql,aggregate-functions,window-functions,ranking-functions,Sql,Postgresql,Aggregate Functions,Window Functions,Ranking Functions,我有一个数据集,它具有主变量的重复值,如下所示: 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

我有一个数据集,它具有主变量的重复值,如下所示:

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 
但是,需要对所需的输出进行排序,以便
计数
是递减的,而
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

我已经尝试了最终的orderby子句的各种迭代,但是不能完全产生我需要的输出。感谢您的指导。

您可以按的顺序使用窗口功能。我想你只是想:

ORDER BY COUNT(*) OVER (PARTITION BY ctm_nbr) DESC,
         ctm_nbr,
         row_numb DESC 
这假设计数是
行的最大值。\u numb()
。因此,您也可以将其表示为:

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

是的,这个就行了。出于某种原因,我根本没有想到这一点。谢谢@Gordon Linoff。