在 PostgreSQL 的 window 函数中按降序聚合排序
Order by descending aggregation within window function in 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
我已经尝试了最终 ORDER BY
子句的各种迭代,但无法完全产生我需要的输出。指导表示赞赏。
您可以在 order by
中使用 window 函数。我想你只是想要:
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
我有一个数据集,其中包含主变量的重复值,如下所示:
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
子句的各种迭代,但无法完全产生我需要的输出。指导表示赞赏。
您可以在 order by
中使用 window 函数。我想你只是想要:
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