繁体   English   中英

我需要在每年的Oracle SQL查询中找到最高选民

[英]I need to find highest voters in each year Oracle SQL query

我有一张表让我们说排名信息

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

我需要在sqldeveloper(Oracle)中编写一个sql查询,这将给我每年投票数最多的成员。 输出应为用户名,年份,每年的总票数。 让我们考虑上面的例子:我需要这样的输出。

username  year  number_Of_Votes
john       1990    2
smith      1991    3

因为在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;
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

SQL Fiddle的例子。

一种方法是

select username, year, cnt from (
select username, cnt, row_number() over (partition by year order by cnt desc) rn
from (
select username, to_char( votedate, 'YYYY' ) year, count(*) cnt
from rankinginfo
group by to_char( votedate, 'YYYY' )
)
) where rn = 1

您可以尝试下面的一个:

SELECT MAX(point) as HIGHEST

FROM
(SELECT pointA as point FROM tableA

UNION
SELECT pointB as point FROM tableB) t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM