powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как бы выкрутится?
7 сообщений из 7, страница 1 из 1
Как бы выкрутится?
    #34426468
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно часто приходится писать запросы типа:
Код: plaintext
1.
2.
3.
4.
5.
SELECT
 place_id, route_id
 FROM route_points
 WHERE (ord,route_id) in
 (SELECT min(ord),route_id FROM route_points GROUP BY route_id)
Ну, смысл простой - получение 1-й записи в определенной группе по определенному критерию, и так для каждой группы.
Естественно, что план выполнения такого запроса оставляет желать лучшего, а именно отсутствия второго прохода по той-же таблице. Интуитивно понятно, что он в общем-то нафиг не нужен.
Может есть какой-то другой подход или способ написания этого (такого плана) запроса без двух проходов по таблице?
...
Рейтинг: 0 / 0
Как бы выкрутится?
    #34426498
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно есть.
Ровно однопроходной вариант.
...
Рейтинг: 0 / 0
Как бы выкрутится?
    #34426540
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабичев СергейКонечно есть.
Ровно однопроходной вариант.
Вот спасибо! Теперь буду два дня пить от радости :)
А если бы еще семплом поделиться или подход описать - можно на неделю в радостный запой уходить!
...
Рейтинг: 0 / 0
Как бы выкрутится?
    #34426600
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основная идея такого подхода показана тут .
...
Рейтинг: 0 / 0
Как бы выкрутится?
    #34426637
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DISTINCT ON
...
Рейтинг: 0 / 0
Как бы выкрутится?
    #34427026
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабичев СергейОсновная идея такого подхода показана тут .
Этот эээ "хулиганский" изврат примерно понятен. В свое время в мускуле так и делал (в те времена подзапросов у него совсем не было ). Но он несколько "некошерен".

По наводке LeXa NalBat получился супер запрос. Именно то, ради чего и заходил на форум.
Код: plaintext
1.
2.
3.
SELECT DISTINCT ON (route_id) place_id, route_id
    FROM route_points
    ORDER BY route_id, ord DESC

При сравнении плана выполнения 1-го и второго запроса на глаза наворачиваются слезы радости.
Нужно будет еще проверить на больших объемах данных. Там может быть не все так радужно.
...
Рейтинг: 0 / 0
Как бы выкрутится?
    #34430557
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey DaeronПри сравнении плана выполнения 1-го и второго запроса на глаза наворачиваются слезы радости.
Нужно будет еще проверить на больших объемах данных. Там может быть не все так радужно.

Если кол-во отбрасываемых значений на каждую запись не велико, то все нормально. (допустим 1 к 5)

Если же будь здоров, то не очень: DISTINCT ON делает выборку всех значений и только потом UNIQUE на получившемся наборе. Тупо, но сейчас так.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как бы выкрутится?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]