2

私はこのテーブルを持っています:

Team | Player
Barca | Messi
Chelsea | Lampard
Barca | Messi
Barca | Messi
Chelsea | Lampard
Chelsea | Drogba
Barca | Iniesta
Barca | Xavi
Barca | Iniesta
Barca | Puyol

したがって、各チームの上位2人の一般的なプレーヤーを取得するクエリが必要です。このようなもの:

Team | Player
Barca | Messi
Barca | Iniesta
Chelsea | Lampard
Chelsea | Drogba
4

2 に答える 2

4

サブクエリ/CTEを使用して、チームごとのカウントの降順に従って行に番号を付けることにより、各プレーヤーのカウントとランキングを計算できます。次に、各チームから上位2人のプレーヤーを引き出します。

クエリデモ):

with ranks as (
  select
    team, player, count(*) as count,
    row_number() over (partition by team order by count(*) desc) as teamrank
  from players p
  group by team, player
)
select
  team, player
from
  ranks
where teamrank <= 2
order by team, teamrank

結果

|    TEAM |  PLAYER |
---------------------
|   Barca |   Messi |
|   Barca | Iniesta |
| Chelsea | Lampard |
| Chelsea |  Drogba |
于 2012-12-26T22:41:23.587 に答える
3

これは、ウィンドウ関数が必要な場所です。

select team, player
from (select team, player, count(*) as cnt,
             row_number() over (partition by team order by count(*) desc) as seqnum
      from team_player tp
      group by team, player
     ) tp
where seqnum in (1, 2)

count(*)これにより、Windows関数内に集計関数がネストされることに注意してください。

于 2012-12-26T22:41:59.593 に答える