2016-08-05 6 views
0

PostgreSQLデータベースでSQLを使用したデータ選択に問題があります。2列+ IDでグループを選択する方法は?

私は1つのテーブルに以下のデータを持っている:

次の結果を得るために、select文の書き方を
ID ID_X ID_Y 
100 1  2 
101 1  1 
102 1  1 
103 1  2 
104 5  10 
105 5  11 
106 5  10 
107 5  11 
108 8  20 
109 8  30 
110 8  20 

ID ID_X ID_Y 
100 1  2 
101 1  1 
104 5  10 
105 5  11 
108 8  20 
109 8  30 

私はそれがID_XとID_Yでグループの一種であることを知っているが、それによってグループ化することなく、また、「ID」列を選択する方法?

別名を使用して選択する方法がありますか?サブセレクトでグループ化しますか?助けてください:)

答えて

2

MIN()やMAX()などの集計関数を使用できます。あなたの場合、MIN()を使用して特定の結果を得ることができます。

SELECT MIN(ID), ID_X, ID_Y 
FROM [tablename] 
GROUP BY ID_X, ID_Y 
0

あなたが好きなように見えますGROUP BY。各グループの最小のIDを返すためにMIN()を使用します。

select * 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t2.ID_X = t1.ID_X 
        and t2.ID_Y = t1.ID_Y 
        and t2.ID < t1.ID) 

すなわち:また

select min(ID), ID_X, ID_Y 
from tablename 
group by ID_X, ID_Y 

、あなたはNOT EXISTSを行うことができますID_XとID_Yが同じでIDは小さい(他の)行がない限り、行を返します。

1

Distinct on

select * 
    from 
     (
     select distinct on (id_x, id_y) ID, id_x, id_y 
     FROM t order by id_x, id_y,id 
     ) q 
     order by id 
を使用して、これを試してみてください
関連する問題