sql - PLPGSQL - 存储过程来获取一组带有计数的行
问题描述
我正在使用 PostgreSQL。
我需要使用 PLPGSQL 语言的存储过程,该语言将返回包含来自 my_table 的前 2 个和后 2 个结果的计数的表(记录集)。
例如:
我的表
id value
1 a
2 a
3 a
4 b
5 b
6 c
7 c
8 e
9 f
10 g
11 g
12 g
13 g
14 h
15 h
回报:
count value
4 g
3 a
1 e
1 f
谢谢
解决方案
您可以将窗口函数与聚合一起使用
select v.value, v.cnt
from (select value, count(*) as cnt,
row_number() over (order by count(*) desc) as seqnum_desc,
row_number() over (order by count(*) asc) as seqnum_asc
from t
group by value
) v
where seqnum_desc <= 2 or seqnum_asc <= 2;
注意:在平局的情况下——尤其是在底端——这将返回具有相同计数的任意值。您可以使用rank()
或对此进行调整dense_rank()
,具体取决于在这种情况下您想要什么。
推荐阅读
- swift - 当我使用 PHImageManager 的 requestAVAsset forVideo 方法时,错误域 = NSPOSIXErrorDomain 代码 = 12“无法分配内存”
- html - 如何在 CSS 中通过悬停更改 svg 图像和文本
- python - Tk 不在此项目的 Visual Studio 中运行,但在另一个项目文件中工作?
- jspdf - jsPDF.AcroForm TextField 新行被忽略,直到点击 pdf 的 textField
- ssl - 在一台计算机上收到客户端 SSL 认证错误,但在另一台计算机上没有?
- swift - 当 UITextField 聚焦并且 scribble 开启时,键盘不显示
- java - 如何使用 g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2) 缩放图像?
- python - 如何在 python dash_cytoscape 中设置同心圆布局参数?
- javascript - Vuex 状态没有返回正确的状态值
- python-3.x - 如何计算 txt 文件中每行的单词实例