首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql中的分组限制10

Postgresql中的分组限制10
EN

Stack Overflow用户
提问于 2012-05-30 19:40:44
回答 1查看 3.2K关注 0票数 2

我有一个疑问:

代码语言:javascript
复制
select
    a.kli,
    b.term_desc,
    count(distinct(a.adic)) as count,
    a.partner_id

from
    ad_delivery.sgmt_kli_adic a
    join wand.wandterms b on a.kli = b.term_code
    join wand.wandterms c on b.term_desc=c.term_desc
    join dwh.sgmt_clients e on a.partner_id::varchar = e.partner_id
    join dwh.schema_names f on e.partner_id::integer = f.partner_id::integer
where
    a.partner_id::integer in (f.partner_id)
    and c.class_code = 969
group by a.partner_id, b.term_desc, a.kli
order by partner_id, count desc;

这会为每个partner_id带来特定术语的计数。我希望能够按照计数顺序显示每个~40 partner_id的前10位。

查询结果如下所示

db=#从xxx中选择*;pid \x{e76f}\x{e76f}+

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 19:50:25

您可以添加一个秩列,然后按级别筛选结果:

代码语言:javascript
复制
select
    a.kli,
    b.term_desc,
    count(distinct(a.adic)) as count,
    a.partner_id,
    RANK() OVER (PARTITION BY a.partner_id order by a.partner_id DESC) AS r
from
    ad_delivery.sgmt_kli_adic a
    join wand.wandterms b on a.kli = b.term_code
    join wand.wandterms c on b.term_desc=c.term_desc
    join dwh.sgmt_clients e on a.partner_id::varchar = e.partner_id
    join dwh.schema_names f on e.partner_id::integer = f.partner_id::integer
where
    a.partner_id::integer in (f.partner_id)
    and c.class_code = 969
group by a.partner_id, b.term_desc, a.kli
HAVING r < 11
order by partner_id, count desc;

我还没有测试代码,但是诀窍是对GROUP BY的每一行进行排序,并使用HAVING子句过滤结果集,只保留级别低于11的项(每个组将得到10项)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10823121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档