代码之家  ›  专栏  ›  技术社区  ›  Dikla

如何在PostgreSQL中按特定列限制结果数?

  •  11
  • Dikla  · 技术社区  · 16 年前

    我有一个带有用户项的表。每个用户可能有几种类型的项目,并且每个项目可能不止一次。我想看看每个用户有多少种类型的项目。所以我使用以下查询:

    select user_name, count(item_name) as "count_item", item_name 
    from my_table 
    group by user_name, item_name 
    order by user_name, count_item desc;
    

    所以我得到了这样的结果:

    user_name | count_item  | item_name
    ----------+-------------+-----------
    User 1    | 10          | item X
    User 1    | 8           | item Y
    User 2    | 15          | item A
    User 2    | 13          | item B
    User 2    | 7           | item C
    User 2    | 2           | item X
    

    等。

    现在,我只想看到 每个用户 . 在上面的示例中,对于用户1,我希望看到项x和y,对于用户2,我希望看到项a、b和c。

    我怎么能做到这一点?

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  3
  •   Rob    16 年前

    使用分区依据。这样的方法应该有效:

    select user_name, count_item, item_name 
    from (select user_name, count(item_name) as "count_item", item_name 
        row_number() over (partition by user_name order by count_item desc)
        from my_table)
    where row_number < 4
    group by user_name, item_name 
    order by user_name, count_item desc;
    
        2
  •  0
  •   a'r    16 年前

    不幸的是,我没有Postgres来测试这一点,但是像下面这样的查询应该可以让您得到您想要的结果。

    select user_name, item_name, item_count from
    (
      select user_name, item_name, count(item_name) as item_count,
        dense_rank() over (order by count(item_name) desc) as item_rank
      from my_table 
      group by user_name, item_name
    )
    where item_rank <= 3;