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

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

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

7 ответов

11 просмотров

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

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

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Всем привет. Подскажите, пожалуйста, как вы реализовываете следующий функционал. Допустим есть форма, в которой имеется выпадающий список со значениями. Значения хранятся в БД...
Евгений
7
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Карта сайта