gpt4 book ai didi

sql - PostgreSQL : How do I select top n percent(%) entries from each group/category

转载 作者:太空狗 更新时间:2023-10-30 01:50:13 26 4
gpt4 key购买 nike

我们是 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 基于每个组中元素的某个百分比。

最佳答案

要根据每组中行数的百分比检索行,您可以使用两个窗口函数:一个用来计算行数,一个给它们一个唯一的数字。

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 几乎总是一个坏主意,因为它是一种填充到定义长度的固定长度数据类型。我希望您这样做只是为了设置示例,不要在您的真实表中使用它。

关于sql - PostgreSQL : How do I select top n percent(%) entries from each group/category,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24626036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com