powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Порядок выборки DISTINCT ON() случаен?
3 сообщений из 3, страница 1 из 1
Порядок выборки DISTINCT ON() случаен?
    #38570845
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть есть таблица t(a INT, b INT, c BOOLEAN)
и две записи (х.з. в каком порядке они расположены)
1, 1, FALSE
1, 2, TRUE

Я делаю
Код: sql
1.
2.
WITH r(a, b, c) AS (SELECT a, b, c FROM t ORDER BY b)
SELECT DISTINCT ON(a) a, b, c FROM r


Какой будет результат? с = TRUE или FALSE ???????
Я рассуждаю так:
В таблице r идет упорядочивание, и первой строкой будет с FALSE, затем TRUE (т.к. b =1, а где с=TRUE, там b = 2).
далее идет выбор с DISTINCT ON(), и я так полагаю, что все повторяющиеся значения кроме первого будут .... короче их не будет. Значит останется FALSE.
Если кто-то думает также, то он как и я ошибается.
Вопросы:
1)где я ошибся,
2)как переделать запрос, чтобы мне выбирало так как я хочу (с FALSE где есть FALSE, и с TRUE только если c FALSE нет похожей записи)
Ваши мысли, коллеги?
Спасибо заранее))
...
Рейтинг: 0 / 0
Порядок выборки DISTINCT ON() случаен?
    #38570926
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,

Доку почитайте
...
Рейтинг: 0 / 0
Порядок выборки DISTINCT ON() случаен?
    #38570941
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Михаил!
Как же я мог забыть про доку? ;-)
DISTINCT ON ( expression [, ...] ) keeps only the first row of each set of rows where the given expressions evaluate to equal. The DISTINCT ON expressions are interpreted using the same rules as for ORDER BY (see above). Note that the "first row" of each set is unpredictable unless ORDER BY is used to ensure that the desired row appears first. For example:

SELECT DISTINCT ON (location) location, time, report
FROM weather_reports
ORDER BY location, time DESC;

retrieves the most recent weather report for each location. But if we had not used ORDER BY to force descending order of time values for each location, we'd have gotten a report from an unpredictable time for each location .

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


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