184 похожих чатов

Всем привет! Довольно простой вопрос, но не нашел в документации

явного ответа. При выполнении distinct остается только первая найденная строка ? или может любая быть выбрана?
(перед этим делаю order by в подзапросе чтобы зафиксировать порядок)

8 ответов

13 просмотров

IMHO делаете или нет order by разницы нет упрощенно DISTINCT через hash map в итоге делается просто прогоняется рекордсет и строка скипается если ее хеш присутствует в массиве существующих ключей

Sergey-Lomdjaria Автор вопроса
Slach [altinity]
IMHO делаете или нет order by разницы нет упрощенн...

Вопрос в каком он порядке добавляет их в этот мап, если в порядке как они есть по одной, и скипает если нашел то тогда всегда первый будет. Если нет, и он как-то параллельно это делает, то тогда нельзя завязываться на то, какой был порядок

Sergey Lomdjaria
Вопрос в каком он порядке добавляет их в этот мап,...

SELECT DISTINCT подразумевает что у вас только полностью уникальные записи выбираются (а не по части полей) но чтобы проверить что "запись еще не встречалась" надо весь рекордсет перебрать так что нет разницы "первая" или "последняя" запись для SELECT DISTRINCT

Sergey-Lomdjaria Автор вопроса
Slach [altinity]
SELECT DISTINCT подразумевает что у вас только пол...

Понял, большое спасибо. Я думал что он делает дистинкт только по первому полю считаются) Придется исправить на groupby

Sergey Lomdjaria
Понял, большое спасибо. Я думал что он делает дист...

нет distinct считается по всем полям а вот все поля которые в GROUP BY приходят должны прогоняться через аггрегатные функции одна из них any(fieldname) https://clickhouse.tech/docs/en/sql-reference/aggregate-functions/reference/any/ и там как раз написано Selects the first encountered value.

Sergey-Lomdjaria Автор вопроса
Slach [altinity]
нет distinct считается по всем полям а вот все по...

Я же правильно понимаю, что здесь надо сначала сделать сортировку в подзапросе, а уже после GroupBy и тогда any() даст нам точно первую строку?

Sergey-Lomdjaria Автор вопроса
Slach [altinity]
нет, ORDER BY делается после GROUP BY

Да, я так и понял, просто выразился неверно, ещё раз спасибо

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта