явного ответа. При выполнении distinct остается только первая найденная строка ? или может любая быть выбрана?
(перед этим делаю order by в подзапросе чтобы зафиксировать порядок)
IMHO делаете или нет order by разницы нет упрощенно DISTINCT через hash map в итоге делается просто прогоняется рекордсет и строка скипается если ее хеш присутствует в массиве существующих ключей
Вопрос в каком он порядке добавляет их в этот мап, если в порядке как они есть по одной, и скипает если нашел то тогда всегда первый будет. Если нет, и он как-то параллельно это делает, то тогда нельзя завязываться на то, какой был порядок
SELECT DISTINCT подразумевает что у вас только полностью уникальные записи выбираются (а не по части полей) но чтобы проверить что "запись еще не встречалась" надо весь рекордсет перебрать так что нет разницы "первая" или "последняя" запись для SELECT DISTRINCT
Понял, большое спасибо. Я думал что он делает дистинкт только по первому полю считаются) Придется исправить на groupby
нет distinct считается по всем полям а вот все поля которые в GROUP BY приходят должны прогоняться через аггрегатные функции одна из них any(fieldname) https://clickhouse.tech/docs/en/sql-reference/aggregate-functions/reference/any/ и там как раз написано Selects the first encountered value.
Я же правильно понимаю, что здесь надо сначала сделать сортировку в подзапросе, а уже после GroupBy и тогда any() даст нам точно первую строку?
нет, ORDER BY делается после GROUP BY
Да, я так и понял, просто выразился неверно, ещё раз спасибо
Обсуждают сегодня