PostgreSQL SQL: найти один произвольный кортеж из каждого идентификатора - PullRequest
2 голосов
/ 11 сентября 2011

Рассмотрим следующую таблицу:

 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 не используется, чтобы гарантировать, что желаемый ряд появляется первым.

1 Ответ

3 голосов
/ 11 сентября 2011

Использование предложения DISTINCT ON должно выполнить работу:

SELECT DISTINCT ON (id) id, x, y FROM table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...