我在用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/

10-11 20:48
查看更多