我有一张表让我们说排名信息
username mvid votedate
john 1 23-sep-90
john 2 23-sep-90
smith 1 23-sep-90
john 3 24-oct-91
smith 3 24-oct-91
smith 4 25-dec-91
smith 5 25-dec-91
Run Code Online (Sandbox Code Playgroud)
我需要在sqldeveloper(Oracle)中编写一个sql查询,这将给我每年投票数最多的成员.输出应为用户名,年份,每年的总票数.让我们考虑上面的例子:我需要这样的输出.
username year number_Of_Votes
john 1990 2
smith 1991 3
Run Code Online (Sandbox Code Playgroud)
因为在1990年,约翰以1票的优势击败史密斯,而在1991年史密斯以2票击败约翰.
我到了计算所有选票的地步但我无法获得一年内的最高票数.
这就是我所做的:
select r1.username,
Extract(year from r1.votedate)"Year",
count(username)
from rankinginfo r1
where Extract(year from r1.votedate) is not null
group by Extract(year from r1.votedate),
r1.username;
order by Extract(year from r1.votedate),
username;
Run Code Online (Sandbox Code Playgroud)
select *
from (
select VotesPerUserPerYear.*
, dense_rank() over (
partition by voteyear
order by votecount desc) as rn
from (
select username
, extract(year from votedate) as voteyear
, count(*) as votecount
from YourTable
group by
username
, extract(year from votedate)
) VotesPerUserPerYear
) SubQueryWithRank
where rn = 1 -- Only top voter per year
Run Code Online (Sandbox Code Playgroud)