程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Postgresql:如何从每个组/类别中选择前n个%(%)条目大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决POSTGResql:如何从每个组/类别中选择前n个%(%)条目?

开发过程中遇到postgresql:如何从每个组/类别中选择前n个%(%)条目的问题如何解决?下面主要结合日常开发的经验,给出你关于POSTGResql:如何从每个组/类别中选择前n个%(%)条目的解决方法建议,希望对你解决POSTGResql:如何从每个组/类别中选择前n个%(%)条目有所启发或帮助;

要基于每个组中行数的百分比来检索行,可以使用两个窗口函数:一个对行进行计数,另一个对行赋予唯一编号。

SELEct gp,
       val
from (
  SELEct gp, 
         val,
         count(*) over (partition by gp) as cnt,
         row_number() over (partition by gp order by val desc) as rn
  from temp
) t
where rn / cnt <= 0.75;

sqlfiddle示例:http://sqlfiddle.com/#!15/94fdd/1

便说一句:使用char几乎总是一个坏主意,因为它是固定长度的数据类型,被填充为定义的长度。我希望您只是为了设置示例而已,不要在实际表中使用它。

解决方法

我们是POSTGRes的新手,我们有以下查询,通过该查询我们可以从每个类别中选择前N个记录。

 create table temp (
     gp char,val int
 );

 insert into temp values ('A',10);
 insert into temp values ('A',8);
 insert into temp values ('A',6);
 insert into temp values ('A',4);
 insert into temp values ('B',3);
 insert into temp values ('B',2);
 insert into temp values ('B',1);

 SELEct a.gp,a.val
 from   temp a
 where  a.val in (
              SELEct b.val
              from   temp b
              where  a.gp=b.gp
              order by b.val desc
             limit 2);

以上查询的输出是这样的

 gp   val
 ----------
 A    10
 A    8
 B    3
 B    2

但是我们的要求有所不同,我们想从每个类别中选择前n%个记录,其中n不固定,n基于每个组中某些元素的百分比。

大佬总结

以上是大佬教程为你收集整理的Postgresql:如何从每个组/类别中选择前n个%(%)条目全部内容,希望文章能够帮你解决Postgresql:如何从每个组/类别中选择前n个%(%)条目所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。