2013-07-31 35 views
1

SQL組唯一按類型和給定數據集位置

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 

(目前只有3個不同的可能type_ids)我想與組,每組TYPE_ID之一返回一個數據集,通過位置排序。

所以會進行分組,像這樣:

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

所以第一組將包括各TYPE_ID最高的(相對)位置得分的條目中,第二組將有第二個最高分,第三將只包含兩個條目(和一個空),因爲沒有三個更多的每個type_id

這是否有意義?這有可能嗎?

+0

爲什麼[標籤:MySQL的]和[標籤:postgresql]標籤?對於爲什麼我突然看到這一連串標籤爲MySQL和PostgreSQL的通用Rails和SQL問題感到困惑。 –

+0

@CraigRinger,因爲我在postgres上使用rails(對於heroku當然是這樣),但我知道mysql更好。 – goddamnyouryan

回答

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 FIDDLE

的,

如果你絕對需要在你的陣列空:

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 FIDDLE