1

このデータセットを考えると:

ID  type_id  Position
1   2        7
2   1        2
3   3        5
4   1        1
5   3        3
6   2        4
7   2        6
8   3        8

(考えられる type_id は 3 つだけです) グループ内の各 type_id の 1 つを含むデータセットを、位置順に並べて返したいと思います。

したがって、次のようにグループ化されます。

Results (ID): [4, 6, 5], [2, 7, 3], [null, 1, 8]

したがって、最初のグループは、最高の (相対) 位置スコアを持つ type_id の各エントリで構成され、2 番目のグループは 2 番目に高いスコアを持ち、3 番目のグループは 2 つのエントリ (および null) のみで構成されます。各 type_id の

これは理にかなっていますか?そしてそれは可能ですか?

4

1 に答える 1

1

そんな感じ:

with CTE as (
  select
      row_number() over (partition by type_id order by Position) as row_num,
      *
  from test
)
select array_agg(ID order by type_id)
from CTE
group by row_num

SQL フィドル

の、配列に null が絶対に必要な場合:

with CTE as (
    select
        row_number() over (partition by type_id order by Position) as row_num,
        *
    from test
)
select array_agg(c.ID order by t.type_id)
from (select distinct row_num from CTE) as a
    cross join (select distinct type_id from test) as t
    left outer join CTE as c on c.row_num = a.row_num and c.type_id = t.type_id
group by a.row_num

SQL フィドル

于 2013-07-31T18:05:25.227 に答える