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

732

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

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

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

11.04.2024    2095    andrey_sag    10    

27

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

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

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

13.02.2024    5973    KawaNoNeko    23    

25

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

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

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

1 стартмани

31.01.2024    2139    2    Yashazz    0    

30

Запрос 1С copilot

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

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

5 стартмани

15.01.2024    6602    31    mkalimulin    27    

51

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

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

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

14.12.2023    1874    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5604    user1923546    26    

46

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16557    skovpin_sa    14    

101
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 315 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
maxx88; Serj1C; Yashazz; A_Max; toxilamer; Boyborodin; user811769; kiruha; Fragster; +9
7. bulpi 215 17.09.19 13:03 Сейчас в теме
(5)
Это понятно. А как посчитать NULL, если надо ?
+
8. dhurricane 17.09.19 13:11 Сейчас в теме
(7) Уточните, пожалуйста, в какой ситуации? Не могу ответить в общем случае, т.к. они довольно разнообразны, соответственно и счет будет разнообразным.
+
11. Fragster 1139 17.09.19 14:52 Сейчас в теме
(7) Сумма(Выбор Когда Поле есть NULL тогда 1 иначе 0 Конец)
bulpi; +1
14. RomanCrow13 111 19.09.19 04:31 Сейчас в теме
(11)
Или
Количество(ЕСТЬNULL(Поле, 0)). Вместо 0 можно вроде даже Неопределено поставить. Главное, что не Null)
klaus38; Fox-trot; +2
15. Fragster 1139 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 272 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 в расчете количества - это самый логичный, ожидаемый и правильный вариант работы запросов. Спасибо, что работает именно так.
+
Внимание! Тема сдана в архив