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

Всем привет! Ребят, подскажите, пожалуйста, работает ли группировка к функциям агрегирования

при обращении этих функций из селекта не к таблице в "FROM", а к присоединенным "JOIN"-ми таблицам?

Т.е.:

SELECT some_table.smth,
COUNT(some_table.smb) FILTER(WHERE some_table.lol = 1),
COUNT(new_table.smb) FILTER(WHERE new_table.kek = 2) AS target
FROM some_table
INNER JOIN new_table ON new_table.value = some_table.value
WHERE new_table.some_condition = 'some value'
GROUP BY smth

— в таком запросе (похожем, естественно) у меня первый COUNT() работает правильно, а второй, будто, не учитывает группировку. У меня в target выводится значение, которое никак не может быть правильным. Делаю запрос по фильтру второго каунта, значение действительно неправильное

8 ответов

3 просмотра

Да всё там работает... Вы знаете, в каком порядке SQL запросы выполняются "логически" (я имею в виду FROM → JOIN → WHERE → GROUP BY → HAVING ...)? Посмотрите по шагам, и будет ясно, почему такое поведение.

Sardor-Tukhtakhodjaev Автор вопроса
Yaroslav Schekin
Да всё там работает... Вы знаете, в каком порядке ...

т.е. он сначала выполняет функции агрегирования, а потом джойнит, верно? А какие тогда значения он вообще сверяет в фильтре? Т.е. если до выполнения COUNT() таблицы из JOIN не присоединены, в моем примере же в FILTER(WHERE new_table.kek = 2) new_table должна быть не определена?

Sardor Tukhtakhodjaev
т.е. он сначала выполняет функции агрегирования, а...

Да наоборот же (и это "базовый" SQL, кстати — в любом tutorial должно быть, по идее)! Вы пробовали по шагам отладить?

Sardor-Tukhtakhodjaev Автор вопроса
Yaroslav Schekin
Да наоборот же (и это "базовый" SQL, кстати — в лю...

ну я нагуглил такое: FROM, включая JOINs WHERE GROUP BY HAVING Функции WINDOW SELECT DISTINCT UNION ORDER BY LIMIT и OFFSET а как это отладить по шагам?) Дело в том, что остальная таблица у меня собирается правильно, проблема именно с этим столбцом. Добавляю COUNT() — проблема есть (неправильные значения в столбце), а иначе все ок:) как говорится, нет столбца — нет проблемы

Sardor Tukhtakhodjaev
ну я нагуглил такое: FROM, включая JOINs WHERE GR...

Это делается как-то так: -- шаг 1: SELECT * FROM some_table INNER JOIN new_table ON new_table.value = some_table.value; -- шаг 2 (вот тут уже должно стать понятно, в чём дело): SELECT * FROM some_table INNER JOIN new_table ON new_table.value = some_table.value WHERE new_table.some_condition = 'some value'; -- И это последний шаг, сам запрос: SELECT some_table.smth, COUNT(some_table.smb) FILTER(WHERE some_table.lol = 1), COUNT(new_table.smb) FILTER(WHERE new_table.kek = 2) AS target, COUNT(*) -- сколько записей в группе, для ясности. И т.п. FROM some_table INNER JOIN new_table ON new_table.value = some_table.value WHERE new_table.some_condition = 'some value' GROUP BY smth; > проблема именно с этим столбцом Проблема у Вас в том, что Вы принципа работы SQL не понимаете, на самом деле. :(

Sardor-Tukhtakhodjaev Автор вопроса
Yaroslav Schekin
Это делается как-то так: -- шаг 1: SELECT * FROM...

Разобрался:) Спасибо большое! У меня в группировке создавалось много строк с одним и тем же логином

Sardor Tukhtakhodjaev
Разобрался:) Спасибо большое! У меня в группировке...

Да не за что. Это они при JOIN-е, до группировки создавались, по идее (я забыл сам пример, не хочется листать ;) ).

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
а чем хуже?
Alexey Kulakov
10
Карта сайта