在 PostgreSQL 的窗口函数中按降序聚合排序
Posted
技术标签:
【中文标题】在 PostgreSQL 的窗口函数中按降序聚合排序【英文标题】:Order by descending aggregation within window function in PostgreSQL 【发布时间】:2021-02-14 15:55:36 【问题描述】:我有一个包含主变量重复值的数据集,如下所示:
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
我已经尝试了最终ORDER BY
子句的各种迭代,但不能完全产生我需要的输出。感谢指导。
【问题讨论】:
【参考方案1】:您可以在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
【讨论】:
是的,这就行了。由于某种原因,我根本没有想到这一点。谢谢@Gordon Linoff。以上是关于在 PostgreSQL 的窗口函数中按降序聚合排序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase 中按降序排列数据 - Python