这不是一个特定的dbms问题,而是一个通用的sql问题。
我有这个数据集
userid | objecteid| count
--------------------------
1 | 1 | 12
1 | 2 | 15
1 | 3 | 6
2 | 4 | 30
2 | 1 | 1
2 | 5 | 9
我需要找到一个查询:对于每个用户,具有最大计数的对象
寻找这样的结果:
userid | objecteid| count
--------------------------
1 | 2 | 15
2 | 4 | 30
因为对象2具有用户1的最大计数,而对象4具有用户2的最大计数
答案 0 :(得分:1)
这可以使用窗口函数轻松解决。
以下是标准ANSI SQL:
select userid, objecteid, "count"
from (
select userid, objecteid, "count",
max("count") over (partition by userid) as max_cnt
from the_table
) t
where "count" = max_cnt;
如果有两个具有相同count
的对象,则两者都将被返回。
或者也可以使用row_number()
代替:
select userid, objecteid, "count"
from (
select userid, objecteid, "count",
row_number() over (partition by userid order by "count" desc) as rn
from the_table
) t
where rn = 1;
与第一个查询不同,如果用户有多个具有相同计数的对象,则只会选择一个行。如果您希望返回这些重复项,请使用dense_rank()
代替row_number()
SQLFiddle:http://sqlfiddle.com/#!15/f02a9/1
答案 1 :(得分:0)
试试这个
Select * from tableName
where count in (
Select Max(count)
from tableName
group by userid
)