Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Группировка в запросе с пустой таблицей

Группировка в запросе с пустой таблицей
Я
   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) Ничего будет в случае

ВЫБРАТЬ
    СУММА(ВременнаяТаблицаСОтбором.Значение) КАК Значение,
    ВременнаяТаблицаСОтбором.Поле КАК Поле
ИЗ
    ВременнаяТаблицаСОтбором КАК ВременнаяТаблицаСОтбором

СГРУППИРОВАТЬ ПО
    ВременнаяТаблицаСОтбором.Поле
   youalex
 
3 - 14.07.21 - 13:09
или  добавить 
ИМЕЮЩИЕ Количество(*) > 0
   Hans
 
4 - 14.07.21 - 13:13
(2) Я уж думал что я полностью заблуждался. Не знал такой ньюанс что без группировочных полей будет такой резльтат.
   Hans
 
5 - 14.07.21 - 13:16
Где тож было правило  - Группировка уменьшает количество записей в таблице, Итоги увеличивают количество записей в таблице. В 1С книжке какой то.
   dubolom
 
6 - 14.07.21 - 13:16
(4) Всё ведь логично.
В (0) группировка общая - по всему множеству (которое всегда одно).
В (2) - по значению поля (если полей с этим значением 0 или вообще 0, то и будет 0 строк).
   Hans
 
7 - 14.07.21 - 13:18
Может у Митичкина в книге было. Надо перечитать, и если что предъявить.
   Said_We
 
8 - 14.07.21 - 13:39
(5, 7) В общем случае так и есть.
В твоем случае пустое множество, у него другие законы. Операции сложения с пустым множеством, умножение, агрегатные функции в таких множествах и т.д. могут работать иначе чем НЕ с пустым.
Ты же обрабатываешь деление на НОЛЬ и вопрос не возникает и претензии не собираешься никому предъявлять? :-)
   Said_We
 
9 - 14.07.21 - 13:54
Выбрать
     ВТ_Данные.Поле1
    ,ВТ_Пустая.Поле1
ИЗ
    ВТ_Данные как ВТ_Данные  
    <ВИД СОЕДИНЕНИЯ> ВТ_Пустая как ВТ_Пустая
    ПО ИСТИНА

Левое и полное соединение вернет столько строк сколько в ВТ_Данные
Правое и внутреннее вернет пустую таблицу

И декартово перемножение вернет тоже пустую таблицу. Хотя вроде как каждый с каждым. Но умножение на пустое множество есть пустое множество.

С агрегатными функциями примерно всё так же, т.е. есть свои нюансы.
   Hans
 
10 - 14.07.21 - 14:25
Даже в запросах у меня куча пробелов.
   Said_We
 
11 - 14.07.21 - 16:12
(10) У всех есть где-то пробелы :-) Только часто мы об этом незнаем и даже не догадываемся :-)
   Kassern
 
12 - 14.07.21 - 16:38
(0) Давно знаком с подобным поведением запроса, вот простой пример:
ВЫБРАТЬ
    СУММА(БонусныеБаллы.Начислено) КАК Начислено
ИЗ
    РегистрНакопления.БонусныеБаллы КАК БонусныеБаллы
ГДЕ
    БонусныеБаллы.Партнер = ""

В данном случае отбор таблицу по идее должен без записей оставить, но из-за СУММА() выводится пустая строчка со значением null
   Kassern
 
13 - 14.07.21 - 16:39
(12) но стоит только добавить какое то поле группировки, то результат запроса становится пустым)
   Said_We
 
14 - 15.07.21 - 14:01
Такое поведение вы считаете не логичным или логичным?
   Kassern
 
15 - 15.07.21 - 14:18
(14) мне такое поведение показалось странным, когда в первый раз столкнулся с этим. Ожидал что будет пустой результат.
   1Сергей
 
16 - 15.07.21 - 14:23
(14) Почему бы и да?
   Said_We
 
17 - 15.07.21 - 16:18
(15) Не знаю... Я не знаю как там правильно, но мне видится это так:

В первом случае без группировки агрегатная сумма применяется ко всему множеству, значение NULL, как и само множество. Т.е. саму функцию есть к чему применить, пусть к пустому, но множеству.
В случае с группировкой сумма применяется к группировкам. Сама по себе группировка подразумевает значение. Так как нет значений, то и нет группировок, следовательно и значений нет. Не к чему применять агрегатную функцию.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.