Количество NULL в запросе

17.09.19

Разработка - Запросы

При определении количества элементов в виде "NULL" в результирующей таблице запроса нам возвращается значение "0".

1. Искусственно сформируем таблицу с двумя строками, где колонка будет со значением "NULL":

ВЫБРАТЬ
	NULL КАК Поле1
ПОМЕСТИТЬ ВременнаяТаблица

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	NULL
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(ВременнаяТаблица.Поле1) КАК Поле1
ИЗ
	ВременнаяТаблица КАК ВременнаяТаблица

 

В результате получим таблицу:

 

 

2. Немного изменим запрос.

Добавим в одни из первых запросов значение:

ВЫБРАТЬ
	NULL КАК Поле1
ПОМЕСТИТЬ ВременнаяТаблица

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(ВременнаяТаблица.Поле1) КАК Поле1
ИЗ
	ВременнаяТаблица КАК ВременнаяТаблица

 

В результате получим таблицу:

 

 

3. Попробуем добавить в запрос "РАЗЛИЧНЫЕ":

ВЫБРАТЬ
	NULL КАК Поле1
ПОМЕСТИТЬ ВременнаяТаблица

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВременнаяТаблица.Поле1) КАК Поле1
ИЗ
	ВременнаяТаблица КАК ВременнаяТаблица

 

В результате получим таблицу:

 

Вывод:

Известно, что NULL не является значением (его отсутствие), но для меня было не очевидно данное поведение.

запрос null

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184737    1029    403    

968

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

2 стартмани

06.02.2025    2201    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5734    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13140    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8220    XilDen    36    

90

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3193    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    10801    user1840182    5    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. soft_wind 17.09.19 09:46 Сейчас в теме
просто немного по другому надо строить запросы и все отлично считается, попробуйте так
Выбрать null как п1 поместить Таб
Объединить все Выбрать null 
Объединить все Выбрать null 
Объединить все Выбрать 1
;
выбрать 
	ЕстьNull(таб.п1,"Это Null") как п1,
	Количество(*)
сгруппировать по
Таб.п1	 
Показать
6. bulpi 217 17.09.19 13:02 Сейчас в теме
(1)
Лениво проверять, но ИМХО , в запросе ошибка.
9. soft_wind 17.09.19 13:30 Сейчас в теме
(6) нет там ошибки, я же его в консоли писал, уж кнопку: Выполнить нажать мне не лень было
18. ImHunter 334 20.09.19 10:05 Сейчас в теме
ВЫБРАТЬ
	NULL КАК п1
ПОМЕСТИТЬ Таб

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	NULL

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	NULL
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(1) КАК Поле1
ИЗ
	Таб КАК Таб
ГДЕ
	Таб.п1 ЕСТЬ NULL
Показать
toxilamer; +1 Ответить
2. SnubbyAston 53 17.09.19 09:47 Сейчас в теме
Забавное наблюдение. Интересно, а сюрпризов от других СУБД не будет (cам проверил на файловой и MS SQL)?
3. VmvLer 17.09.19 09:54 Сейчас в теме
Кэп, агрегаты КОЛИЧЕСТВО(), СУММА() полностью осмыслены?
4. VmvLer 17.09.19 09:57 Сейчас в теме
вы же осмыслили тезис
Известно, что NULL не является значением (его отсутствие)

а теперь примените это знание к агрегату
5. dhurricane 17.09.19 10:02 Сейчас в теме
Эх, вот и мое пришло время вставить свое занудное замечание.

Коллеги, если не обращаться ни к документации, ни к справке, ни к книгам, можно еще много найти неожиданностей.
Функция подсчитывает количество значений параметра, попавших в выборку. В отличие от других агрегатных функций, функция КОЛИЧЕСТВО допускает три способа использования:

● Функция позволяет подсчитать количество значений указанного поля, не равных NULL.

● Функция позволяет подсчитать количество различных значений указанного поля, не равных NULL. Для этого перед спецификацией поля нужно указать ключевое слово РАЗЛИЧНЫЕ.

● Функция позволяет подсчитать количество строк в результате запроса. Для этого в качестве параметра функции нужно указать звездочку «*».

В качестве параметра функции можно указывать ссылки на поля, содержащие значения любого типа.
https://its.1c.ru/db/v8314doc#bookmark:dev:TI000000494
simgo83; zzz14; maxx88; Serj1C; Yashazz; A_Max; toxilamer; Boyborodin; user811769; kiruha; Fragster; +11 Ответить
7. bulpi 217 17.09.19 13:03 Сейчас в теме
(5)
Это понятно. А как посчитать NULL, если надо ?
8. dhurricane 17.09.19 13:11 Сейчас в теме
(7) Уточните, пожалуйста, в какой ситуации? Не могу ответить в общем случае, т.к. они довольно разнообразны, соответственно и счет будет разнообразным.
11. Fragster 1155 17.09.19 14:52 Сейчас в теме
(7) Сумма(Выбор Когда Поле есть NULL тогда 1 иначе 0 Конец)
14. RomanCrow13 111 19.09.19 04:31 Сейчас в теме
(11)
Или
Количество(ЕСТЬNULL(Поле, 0)). Вместо 0 можно вроде даже Неопределено поставить. Главное, что не Null)
klaus38; Fox-trot; +2 Ответить
15. Fragster 1155 19.09.19 14:07 Сейчас в теме
(14) у вас не количество значений null, а количество с учетом null. Так и сумма(1) можно использовать.
16. soft_wind 19.09.19 14:15 Сейчас в теме
(15) а там группировка стоит по полю со значением НУЛЛ, как раз и получаем количество строк (как писали выше) со значением НУЛЛ
а вот интересно почему группировка понимает НУЛЛ? и правильно группирует по нему?
17. RomanCrow13 111 19.09.19 16:38 Сейчас в теме
(15) в таком случае и смысл задачи отсутствует. Чисто только для теории.. Правда, какой смысл использовать ЕСТЬNULL(Null, 0), если null всегда есть null:)
12. Unk92 287 18.09.19 09:59 Сейчас в теме
(5) Посмотрев на документацию должна сработать конструкция
КОЛИЧЕСТВО(*) - КОЛИЧЕСТВО(ТаблицаДанных.Поле1) КАК Результат

Но это не очевидное решение и при чтении кода, потом явно будут проблемы =)
13. dhurricane 18.09.19 10:13 Сейчас в теме
(12) Можно попробовать дать понятный псевдоним. :) Либо воспользоваться конструкцией из (11). В конце концов задача подсчета количества строк, где есть значение NULL не самая распространенная, поэтому из контекста должно быть понятно, что это за выражение запроса.
Fox-trot; +1 Ответить
10. Nadushka74 5 17.09.19 13:59 Сейчас в теме
А не проще через ЕстьNull - определить как удобное для вас значение и его посчитать?
Ну для меня это самый удобный способ, так как часто приходиться выводить таблицы, где может быть Null. для дальнейшей работы.
А вообще сам по себе null конечно в многих функция отрабатывает не так ожидаешь, но надо быть к этому готовым. ))
19. Ranetka 23 19.11.22 19:26 Сейчас в теме
Учет NULL как 0 в расчете количества - это самый логичный, ожидаемый и правильный вариант работы запросов. Спасибо, что работает именно так.
Оставьте свое сообщение