Рассмотрим следующую таблицу:
id | x | y
----+----+-----
1 | 10 | 100
1 | 20 | 120
1 | 30 | 130
2 | 10 | 130
2 | 20 | 130
2 | 30 | 130
3 | 20 | 130
(7 rows)
Я хотел бы иметь один произвольный кортеж из каждого id
с соответствующими значениями x
и y
. Следующие результаты верны:
id | x | y
----+----+-----
1 | 10 | 100
2 | 20 | 130
3 | 20 | 130
Или:
id | x | y
----+----+-----
1 | 30 | 130
2 | 30 | 130
3 | 20 | 130
Ни id
, x
, ни y
не являются уникальными в любом контексте.
Как мне это сделать в SQL (под PostgreSQL
)? Там может быть несколько миллионов id
с.
Обновление:
Спасибо, @ Лукаш Лалински. Цитирую документацию по PostgreSQL, с которой вы связались:
DISTINCT ON
(выражение [, ...]) сохраняет только первую строку каждого
набор строк, где заданные выражения оцениваются как равные ... Обратите внимание, что «первая строка» каждого набора
непредсказуемо, если только ORDER BY
не используется, чтобы гарантировать, что желаемый ряд
появляется первым.