3

私は1つのテーブルを持っています

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;
4

3 に答える 3

5
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 の例。

于 2013-05-09T11:33:41.817 に答える
-1

以下のものを試すことができます:

SELECT MAX(point) as HIGHEST

FROM
(SELECT pointA as point FROM tableA

UNION
SELECT pointB as point FROM tableB) t
于 2013-05-09T11:32:53.170 に答える