gpt4 book ai didi

sql - Postgres : return first N rows per group for groups having a minimum countI

转载 作者:行者123 更新时间:2023-11-29 12:10:27 24 4
gpt4 key购买 nike

我复制了这篇有用帖子的逻辑 Grouped LIMIT in PostgreSQL: show the first N rows for each group?按组获取前 N 行,按创建日期排序。但是,我真的只对具有最小行数的大容量用户感兴趣。这是否必须作为一组两个不同的查询来完成,或者我可以在下面修改我的查询吗?

SELECT userid, createdat, displaydate
FROM
( SELECT ROW_NUMBER() OVER
(PARTITION BY userid ORDER BY createdat) as r,
t.* FROM data t) x
WHERE x.r <=100

特别是我尝试了以下导致错误的方法:

SELECT userid, createdat, displaydate
FROM
( SELECT ROW_NUMBER() OVER
(PARTITION BY userid ORDER BY createdat) as r,
t.* FROM data t) x
WHERE x.r <=100
HAVING COUNT(*) > 100

理想情况下,对于至少拥有 100 行数据的用户,我会为每个用户获取前 100 行。 我怎样才能做到这一点?

我还怀疑单个查询可能不是执行此操作的最有效方法,即使它是可以实现的。 执行此操作的“最佳实践”方法是什么(当然,我确实需要在自己的系统上测试所有条件)

最佳答案

您还可以使用另一个窗口函数在子查询中进行计数:

SELECT userid, createdat, displaydate
FROM (SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY userid ORDER BY createdat) as seqnum,
COUNT(*) OVER (PARTITION BY userid) as cnt
FROM data t
) x
WHERE x.seqnum <= 100 AND x.cnt > 100;

关于sql - Postgres : return first N rows per group for groups having a minimum countI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38589305/

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