我在用PostgreSQL。
我需要使用PLPGSQL语言的存储过程,该存储过程将返回表(一组记录),其中包含我的表的前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
谢谢你
最佳答案
可以将窗口函数与aggregation一起使用
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;
注意:在ties的情况下——特别是在底端——返回具有相同计数的任意值。您可以使用
rank()
或dense_rank()
对此进行调整,具体取决于您在这种情况下需要什么。关于sql - PLPGSQL-存储过程获取带有计数的一组行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58415221/