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

Товарищи, а принципиально нельзя сделать функцию над агрегатом в одну

строчку, например, arraySort(groupArray(*))?

7 ответов

27 просмотров

А в чем проблема

Ilya-Fiks Автор вопроса
Dmitry [Altinity] Titov
А в чем проблема

Вот, например: SELECT groupArray(*) over (PARTITION BY user_id ORDER BY rank ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING) FROM ****; Работает без проблем. Но, SELECT arrayReverse(groupArray(*)) over (PARTITION BY user_id ORDER BY rank ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING) FROM ****; Ругается: ``` Code: 215. DB::Exception: Column user_id is not under aggregate function and not in GROUP BY: While processing arrayReverse(groupArray(***)) OVER (PARTITION BY user_id ORDER BY rank ASC Rows BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING). (NOT_AN_AGGREGATE) (version 22.2.2.1) ```

Ilya Fiks
Вот, например: SELECT groupArray(*) over (PARTITI...

Ну так это вопрос к оконным функциям, а не к агрегатным https://github.com/ClickHouse/ClickHouse/issues/19857

Ilya-Fiks Автор вопроса
Dmitry [Altinity] Titov
Ну так это вопрос к оконным функциям, а не к агрег...

да, наверно ты прав... просто, казалось, что это проблема именно агрегатным.... Обязательно вернусь, если что-то другое обнаружу

Ilya Fiks
да, наверно ты прав... просто, казалось, что это п...

Тогда вам нужно в подзапрос уносить А вообще arrayReverse(groupArray(*)) Выглядит жутковато, а вам зачем такое надо?

Ilya-Fiks Автор вопроса
Dmitry [Altinity] Titov
Тогда вам нужно в подзапрос уносить А вообще arr...

>Тогда вам нужно в подзапрос уносить Да, запрос становится ужасным... > а вам зачем такое надо? Это был пример

Dmitry [Altinity] Titov
Ну так это вопрос к оконным функциям, а не к агрег...

Вообще, формулировка в баге некорректная. не aggregate over window, а window over aggregate. А на деле вообще ни то, ни то. Window точно нельзя агрегировать. window считается поверх результата запроса и над ним можно делать только эм.. не знаю как сказать. map преобразования. т.е. нельзя агрегировать поле window, по нему нельзя фильтровать, нельзя делать window поверх window и прочее. только через подзапрос. Но обычно можно делать любые арифметические преобразованияю, всякие case, if, операции сравнения. Здесь же, похоже, не реализован этот шаг с вычислениями, т.е. window не может быть участником других операций (я смотрю на версии 21.8), так что через подзапрос. Но даже не в реализации дело, похоже, а в алиасах. В этом плане клик очень либеральный и позволяет крутить алиасы как угодно. и где-то здесь возникает затык. Само выражение окна не попадает в результирующий список столбцов. И на этом конец. Вот это работает корректно SELECT sum(sum(number)) OVER (PARTITION BY (number % 10)) FROM numbers(10000) GROUP BY number % 10 SETTINGS allow_experimental_window_functions = 1 А вот так ругается уже SELECT sum(sum(number)) OVER (PARTITION BY (number % 10)) + 1 FROM numbers(10000) GROUP BY number % 10 SETTINGS allow_experimental_window_functions = 1 Code: 47, e.displayText() = DB::Exception: Unknown identifier: sum(sum(number)) OVER (PARTITION BY number % 10); there are columns: modulo(number, 10), sum(number): While processing sum(sum(number)) OVER (PARTITION BY (number % 10)) + 1 (version 21.8.15.15.altinitystable (altinity build)) Кажется, что это могут пофиксить, если еще не пофиксили, в следующих релизах. Никакого криминала. При этом в постгрес можно написать вот так и все ок. SELECT sum(number)/ (sum(sum(number)) OVER (PARTITION BY (number % 10))) from generate_series(1, 10) as number GROUP BY number % 10

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта