我有一个包含用户项目的表.每个用户可以具有多种类型的项目,并且可以使每个项目不止一次.我想看看每个用户拥有的每种类型的项目数量.所以我使用以下查询:
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;
Run Code Online (Sandbox Code Playgroud)
所以我得到这样的东西:
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
Run Code Online (Sandbox Code Playgroud)
等等
现在,我想只看到每个用户的前3项.在上面的示例中,对于用户1,我想要查看项目X和Y,对于用户2,我想要查看项目A,B和C.
我怎么能这样呢?
谢谢!
使用分区依据。像这样的东西应该有效:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |