|   |   | 
| 
 | Группировка в запросе с пустой таблицей | ☑ | ||
|---|---|---|---|---|
| 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, как и само множество. Т.е. саму функцию есть к чему применить, пусть к пустому, но множеству. В случае с группировкой сумма применяется к группировкам. Сама по себе группировка подразумевает значение. Так как нет значений, то и нет группировок, следовательно и значений нет. Не к чему применять агрегатную функцию. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |