PostgreSQL如何按app_count排名选取每个distinct user_id对应的行
实现思路
你可以通过PostgreSQL内置的窗口函数ROW_NUMBER()实现需求,核心逻辑是按user_id分组后对每组的app_count做倒序排序,取每组排名第一的记录即可。
具体查询语句
请将SQL中的你的实际表名替换为你自己的表名:
WITH ranked_data AS ( SELECT user_id, sum, app_id, app_count, -- 按user_id分组,组内按app_count从高到低排序生成序号 ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY app_count DESC) AS rank_num FROM 你的实际表名 ) -- 过滤得到每个user_id对应的app_count最高的记录 SELECT user_id, sum, app_id, app_count FROM ranked_data WHERE rank_num = 1;
补充说明
如果同一个user_id下存在多个app_count同为最大值的行、你需要全部保留的话,把ROW_NUMBER()替换为RANK()即可,当前需求下用ROW_NUMBER()刚好匹配你给出的期望结果。
内容的提问来源于stack exchange,提问作者Urchboy
相关产品推荐
相关产品推荐

