首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL查询性能及变化

问PostgreSQL查询性能及变化
EN

Stack Overflow用户
提问于 2015-05-27 08:15:20
回答 1查看 63关注 0票数 0

我有一个事件表,包含以下列user_id、points、created。我需要的是得到给定月份的所有积分,给定user_id的总分和总排名。我需要在一个查询中这样做,这导致了以下尝试:

代码语言:javascript
复制
select
    e.user_id,
    sum(e.points) as total_points,
    (select sum(points) from event where user_id = 1 and extract(month from created) = 1) as month_points,
    (select rank from (select user_id as id, rank() over (order by sum(points) desc) from event group by user_id) as rank where id = 1)
from
    event pte
where
    e.user_id = 1
group by
    e.user_id
;

我想问的是:

  1. 这个查询会慢吗?
  2. 还能用另一种方式做得更好吗?
  3. rank函数是否足够可靠,还是被滥用了?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-27 11:23:22

假设postgresql大于或等于9.4,则可以使用聚合filter子句来避免为month_points和rank进行子选择

代码语言:javascript
复制
select * from
    (select
        e.user_id,
        sum(e.points) as total_points,
        sum(points) filter (where extract(month from created) = 1) as month_points,
        rank() over (order by sum(points) desc)
    from
        event e
    group by
        e.user_id
    ) as inner_query
where user_id = 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30476791

复制
相关文章

相似问题

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