Количество 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

См. также

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    131997    721    390    

763

Как посмотреть итоговый запрос в отчете СКД

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    3925    implecs_team    6    

38

Пропорциональное распределение в запросе с использованием АвтоНомерЗаписи()

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    2692    andrey_sag    10    

32

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Программист Стажер Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    6390    KawaNoNeko    23    

26

Набор-объект для СКД по тексту или запросу

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2351    2    Yashazz    0    

32

Запрос 1С copilot

Инструментарий разработчика Запросы Программист Стажер Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

15.01.2024    7337    51    mkalimulin    32    

54

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    2084    vandalsvq    7    

29

Консоль запросов УФ 8.3.2.24.12 (мод от Dr.Zombi)

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

Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц. Главное скорость отладки запроса и данных, а красота вторична.

1 стартмани

07.12.2023    3554    52    DrZombi    54    

21
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. soft_wind 17.09.19 09:46 Сейчас в теме
просто немного по другому надо строить запросы и все отлично считается, попробуйте так
Выбрать null как п1 поместить Таб
Объединить все Выбрать null 
Объединить все Выбрать null 
Объединить все Выбрать 1
;
выбрать 
	ЕстьNull(таб.п1,"Это Null") как п1,
	Количество(*)
сгруппировать по
Таб.п1	 
Показать
6. bulpi 215 17.09.19 13:02 Сейчас в теме
(1)
Лениво проверять, но ИМХО , в запросе ошибка.
9. soft_wind 17.09.19 13:30 Сейчас в теме
(6) нет там ошибки, я же его в консоли писал, уж кнопку: Выполнить нажать мне не лень было
18. ImHunter 318 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
zzz14; maxx88; Serj1C; Yashazz; A_Max; toxilamer; Boyborodin; user811769; kiruha; Fragster; +10 Ответить
7. bulpi 215 17.09.19 13:03 Сейчас в теме
(5)
Это понятно. А как посчитать NULL, если надо ?
8. dhurricane 17.09.19 13:11 Сейчас в теме
(7) Уточните, пожалуйста, в какой ситуации? Не могу ответить в общем случае, т.к. они довольно разнообразны, соответственно и счет будет разнообразным.
11. Fragster 1140 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 1140 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 274 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 в расчете количества - это самый логичный, ожидаемый и правильный вариант работы запросов. Спасибо, что работает именно так.
Оставьте свое сообщение