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

12000 руб.

02.09.2020    169274    937    403    

905

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

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

18.10.2024    11394    sergey279    18    

65

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

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

11.10.2024    6338    XilDen    36    

83

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

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

16.08.2024    9068    user1840182    5    

28

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

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2727    ivanov660    9    

22

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

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

15.05.2024    10219    implecs_team    6    

48

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

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

11.04.2024    3623    andrey_sag    10    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 330 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 217 17.09.19 13:03 Сейчас в теме
(5)
Это понятно. А как посчитать NULL, если надо ?
8. dhurricane 17.09.19 13:11 Сейчас в теме
(7) Уточните, пожалуйста, в какой ситуации? Не могу ответить в общем случае, т.к. они довольно разнообразны, соответственно и счет будет разнообразным.
11. Fragster 1152 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 1152 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 284 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 в расчете количества - это самый логичный, ожидаемый и правильный вариант работы запросов. Спасибо, что работает именно так.
Оставьте свое сообщение