如何按2列+ id选择组?

时间:2016-08-05 09:08:42

标签: sql database postgresql

我在PostgreSQL数据库中使用SQL进行数据选择时遇到问题。

我在一个表格中有以下数据:

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”列而不进行分组呢?

也许有一种方法可以选择使用distinct?或者通过subselect分组?请帮助:)

3 个答案:

答案 0 :(得分:2)

您可以使用MIN()或MAX()等聚合函数。在您的情况下,您希望MIN()获得这些特定结果。

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

答案 1 :(得分: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

答案 2 :(得分: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较低,则返回一行。