|
Группировка в запросе с пустой таблицей | ☑ | ||
---|---|---|---|---|
0
Hans
14.07.21
✎
12:45
|
Стаж 10 лет. Я думал в результате в таблице не будет ничего. А оказалось будет NULL. А где про это написано?
ВЫБРАТЬ "А" КАК Поле, 100 КАК Значение ПОМЕСТИТЬ ВременнаяТаблица ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Б", 200 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "В", 300 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВременнаяТаблица.Поле КАК Поле, ВременнаяТаблица.Значение КАК Значение ПОМЕСТИТЬ ВременнаяТаблицаСОтбором ИЗ ВременнаяТаблица КАК ВременнаяТаблица ГДЕ ВременнаяТаблица.Поле = "Я" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ВременнаяТаблицаСОтбором.Значение) КАК Значение ИЗ ВременнаяТаблицаСОтбором КАК ВременнаяТаблицаСОтбором |
|||
1
ДенисЧ
14.07.21
✎
12:47
|
Если ты ставишь СУММА() - то разумеется, NULL будет
Написано в любом учебнике по SQL |
|||
2
Мультук
гуру
14.07.21
✎
13:02
|
(0) Ничего будет в случае
ВЫБРАТЬ СУММА(ВременнаяТаблицаСОтбором.Значение) КАК Значение, ВременнаяТаблицаСОтбором.Поле КАК Поле ИЗ ВременнаяТаблицаСОтбором КАК ВременнаяТаблицаСОтбором СГРУППИРОВАТЬ ПО ВременнаяТаблицаСОтбором.Поле |
|||
3
youalex
14.07.21
✎
13:09
|
или добавить
ИМЕЮЩИЕ Количество(*) > 0 |
|||
4
Hans
14.07.21
✎
13:13
|
(2) Я уж думал что я полностью заблуждался. Не знал такой ньюанс что без группировочных полей будет такой резльтат.
|
|||
5
Hans
14.07.21
✎
13:16
|
Где тож было правило - Группировка уменьшает количество записей в таблице, Итоги увеличивают количество записей в таблице. В 1С книжке какой то.
|
|||
6
dubolom
14.07.21
✎
13:16
|
(4) Всё ведь логично.
В (0) группировка общая - по всему множеству (которое всегда одно). В (2) - по значению поля (если полей с этим значением 0 или вообще 0, то и будет 0 строк). |
|||
7
Hans
14.07.21
✎
13:18
|
Может у Митичкина в книге было. Надо перечитать, и если что предъявить.
|
|||
8
Said_We
14.07.21
✎
13:39
|
(5, 7) В общем случае так и есть.
В твоем случае пустое множество, у него другие законы. Операции сложения с пустым множеством, умножение, агрегатные функции в таких множествах и т.д. могут работать иначе чем НЕ с пустым. Ты же обрабатываешь деление на НОЛЬ и вопрос не возникает и претензии не собираешься никому предъявлять? :-) |
|||
9
Said_We
14.07.21
✎
13:54
|
Выбрать
ВТ_Данные.Поле1 ,ВТ_Пустая.Поле1 ИЗ ВТ_Данные как ВТ_Данные <ВИД СОЕДИНЕНИЯ> ВТ_Пустая как ВТ_Пустая ПО ИСТИНА Левое и полное соединение вернет столько строк сколько в ВТ_Данные Правое и внутреннее вернет пустую таблицу И декартово перемножение вернет тоже пустую таблицу. Хотя вроде как каждый с каждым. Но умножение на пустое множество есть пустое множество. С агрегатными функциями примерно всё так же, т.е. есть свои нюансы. |
|||
10
Hans
14.07.21
✎
14:25
|
Даже в запросах у меня куча пробелов.
|
|||
11
Said_We
14.07.21
✎
16:12
|
(10) У всех есть где-то пробелы :-) Только часто мы об этом незнаем и даже не догадываемся :-)
|
|||
12
Kassern
14.07.21
✎
16:38
|
(0) Давно знаком с подобным поведением запроса, вот простой пример:
ВЫБРАТЬ СУММА(БонусныеБаллы.Начислено) КАК Начислено ИЗ РегистрНакопления.БонусныеБаллы КАК БонусныеБаллы ГДЕ БонусныеБаллы.Партнер = "" В данном случае отбор таблицу по идее должен без записей оставить, но из-за СУММА() выводится пустая строчка со значением null |
|||
13
Kassern
14.07.21
✎
16:39
|
(12) но стоит только добавить какое то поле группировки, то результат запроса становится пустым)
|
|||
14
Said_We
15.07.21
✎
14:01
|
Такое поведение вы считаете не логичным или логичным?
|
|||
15
Kassern
15.07.21
✎
14:18
|
(14) мне такое поведение показалось странным, когда в первый раз столкнулся с этим. Ожидал что будет пустой результат.
|
|||
16
1Сергей
15.07.21
✎
14:23
|
(14) Почему бы и да?
|
|||
17
Said_We
15.07.21
✎
16:18
|
(15) Не знаю... Я не знаю как там правильно, но мне видится это так:
В первом случае без группировки агрегатная сумма применяется ко всему множеству, значение NULL, как и само множество. Т.е. саму функцию есть к чему применить, пусть к пустому, но множеству. В случае с группировкой сумма применяется к группировкам. Сама по себе группировка подразумевает значение. Так как нет значений, то и нет группировок, следовательно и значений нет. Не к чему применять агрегатную функцию. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |