我在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分组?请帮助:)
答案 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较低,则返回一行。