2016-08-05 104 views
0

我在PostgreSQL数据库中使用SQL进行数据选择时遇到问题。如何通过2列+ id选择组?

我有一个表中的以下数据:

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 

如何写SELECT语句得到下面的结果?

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。使用MIN()返回每个组的最低ID:

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

或者,你可以做一个NOT EXISTS

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) 

即只要没有(其他)具有相同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