|
Снова этот NULL | ☑ | ||
---|---|---|---|---|
0
Crush
06.03.13
✎
13:28
|
Начитался. Знаю, что NULL - это неизвестность и неизвестность нельзя сравнить ни с чем. Даже с собой.
А вот Итоги, Группировка, и "Выбрать различные" считают, что неизвестности равны. При этом наблюдается различное поведение агрегатной функции Количество(). Если её использовать в итогах, то возвращает Null. А если в группировке, то вернет 0. Уверен, что такой случай уже разбирался, но найти не смог. Дайте комменты почему так происходит. ВЫБРАТЬ NULL КАК поленул ПОМЕСТИТЬ вт ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт.поленул КАК поленул, вт.поленул КАК Количество, вт.поленул КАК Сумма, вт.поленул КАК КоличествоРазличных ИЗ вт КАК вт ИТОГИ КОЛИЧЕСТВО(Количество), СУММА(Сумма), КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КоличествоРазличных) ПО поленул ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт.поленул, КОЛИЧЕСТВО(вт.поленул) КАК Количество, СУММА(вт.поленул) КАК Сумма, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ вт.поленул) КАК КоличествоРазличных ИЗ вт КАК вт СГРУППИРОВАТЬ ПО вт.поленул |
|||
1
Fragster
гуру
06.03.13
✎
13:30
|
гы
|
|||
2
Fragster
гуру
06.03.13
✎
13:31
|
вообще итоги - фигня какая-то, правильно количетсво(NULL) = 0
|
|||
3
Тролль главный
06.03.13
✎
13:32
|
у меня сервеная база в итогах количество дает 0
|
|||
4
GANR
06.03.13
✎
13:34
|
НЕЧЕГО NULLу в условиях и группировках вообще делать (исключение проверка на IS NULL)
|
|||
5
Crush
06.03.13
✎
13:37
|
(3) Серверная (mssql + 8.1.12.101) даёт Null и файловая (8.2.15.317) тоже даёт null :)
А у тебя какой релиз? |
|||
6
Тролль главный
06.03.13
✎
13:38
|
(5) 1С:Предприятие 8.2 (8.2.17.153)
|
|||
7
Fragster
гуру
06.03.13
✎
13:38
|
(5) а что, ломалку на более новую версию не нашли?
|
|||
8
Тролль главный
06.03.13
✎
13:39
|
и файловая дает 0
|
|||
9
Megas
06.03.13
✎
13:39
|
(3) У тебя наверное столько много NULL что их хватает на маленький "0"
|
|||
10
Рэйв
06.03.13
✎
13:40
|
Сделай
ЕстьNULL(полеСNULL,0) КАК Нулл и будет сравнивай наздоровье |
|||
11
Тролль главный
06.03.13
✎
13:40
|
группировку делает SQL, итоги - платформа
|
|||
12
Рэйв
06.03.13
✎
13:40
|
*и будет тебе счастье)
|
|||
13
Тролль главный
06.03.13
✎
13:40
|
(10) дело в принципе COUNT не может NULL давать
|
|||
14
Defender aka LINN
06.03.13
✎
13:42
|
(5) 8.2.16 - 0
|
|||
15
exchang
06.03.13
✎
13:47
|
(0) март, весна, птички, девчонки
|
|||
16
rs_trade
06.03.13
✎
13:49
|
(0) В разных местах SQL запроса нулл обрабатывается по разному. Так и есть.
|
|||
17
Тролль главный
06.03.13
✎
13:50
|
а нет, вру NULL дает КОЛИЧЕСТВО в ИТОГАХ, 0 - КОЛИЧЕСТВО РАЗЛИЧНЫЕ
прошу прощения |
|||
18
Тролль главный
06.03.13
✎
13:51
|
+(17) считаю это багой платформы
|
|||
19
Crush
06.03.13
✎
13:59
|
OFF(7) обижаешь! Всё легально. Просто есть "обстоятельства непреодолимой силы"
(6) (18) поставил 8.2.17.153, пустая конфа, Обычное приложение. В консоль запросов (с итс) вставляю текст ВЫБРАТЬ NULL КАК поленул ПОМЕСТИТЬ вт ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт.поленул КАК поленул, вт.поленул КАК Количество, вт.поленул КАК КоличествоРазличных ИЗ вт КАК вт ИТОГИ КОЛИЧЕСТВО(Количество), КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КоличествоРазличных) ПО поленул Количество = null КоличествоРазличных = 0 Куда копать? |
|||
20
Crush
06.03.13
✎
14:00
|
+(19)
Количество = null КоличествоРазличных = 0 Куда копать? |
|||
21
rs_trade
06.03.13
✎
14:01
|
Не стоит обсуждать работу NULL-а на примере 1С. Поведение NULL-а идет из SQL.
|
|||
22
Sammo
06.03.13
✎
14:02
|
А какой содержательный смысл считать количество нуллов?
|
|||
23
exchang
06.03.13
✎
14:02
|
Тусклый свет монитора ослепил смысл жизни Краш, он не спал уже третьи сутки, беспомощный и взъерошенный, он беспощадно энтерил в консоли. Очевидная истина никак не хотела смириться в своей неизвестности.
|
|||
24
НафНаф
06.03.13
✎
14:04
|
(21) да, только 1С его использует
|
|||
25
КонецЦикла
06.03.13
✎
14:07
|
(20) А какое количество различных должно быть?
SQL считает что 0 |
|||
26
КонецЦикла
06.03.13
✎
14:08
|
А количество 0
Все правильно Количество - это же агрегация |
|||
27
Crush
06.03.13
✎
14:09
|
(21) согласятся те, кто работает с sql минуя 1С. Я к таким не отношусь :(
(22) анализировал тут с помощью консоли и столкнулся с отсутствием фантазии при подсчете удаленных строк таблицы. Поле "Удалена" добавлять было в лом. Решил считать нулы:) Кстати такая конструкция оба количества равняет к 1 ВЫБРАТЬ NULL КАК поленул ПОМЕСТИТЬ вт ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ненул" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт.поленул КАК поленул, вт.поленул КАК Количество, вт.поленул КАК КоличествоРазличных ИЗ вт КАК вт ИТОГИ КОЛИЧЕСТВО(Количество), КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КоличествоРазличных) ПО ОБЩИЕ |
|||
28
hhhh
06.03.13
✎
14:13
|
(27) а так?
ВЫБРАТЬ ЕСТЬNULL(NULL, "удалена") КАК поленул ПОМЕСТИТЬ вт ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЕСТЬNULL(NULL, "удалена") ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ненул" ; |
|||
29
Crush
06.03.13
✎
14:23
|
(28) говорю же, тут всё понятно!
Не понятно почему счетчик строк даёт неизвестность, при этом счет различных строк - говорит, что н0ль. А реально строк - 2. Хмм... походу начинает доходить.. Считаются то не строки, а значения.. Значения нет. Ну все равно Количество() и Количество(РАЗЛИЧНЫЕ) должны быть равны либо 0 либо Null либо 1 либо 2. Кстати, из логики Null-а обе функции должны возвращать Null. Т.к. мы не можем утверждать, что количество значений 0, 1 или 2. - значений же нет! |
|||
30
Crush
06.03.13
✎
14:24
|
+(29) Глядишь 1С когда-нибудь переплюнет SQL:)
|
|||
31
НафНаф
06.03.13
✎
14:25
|
(29) значения есть, но они неизвестны или неопределены, а да, "Неопределено" же в 1С другое
такая вот платформа для хомячков |
|||
32
rs_trade
06.03.13
✎
14:36
|
(27) Почитав в BOL как ведет себя NULL, не будет вопросов к 1с.
|
|||
33
КонецЦикла
06.03.13
✎
14:47
|
(29) "Returns the number of items in a group. COUNT works like the COUNT_BIG function. The only difference between the two functions is their return values. COUNT always returns an int data type value. COUNT_BIG always returns a bigint data type value."
(цы) |
|||
34
КонецЦикла
06.03.13
✎
14:48
|
(30) Кое-что она перемалывает у себя в кишках
Если нуралиевцы налажают то и переплюнуть может :) |
|||
35
Crush
06.03.13
✎
15:26
|
(32)
COUNT Типы возвращаемых данных - int !!!! Замечания Функция COUNT(*) возвращает количество элементов в группе. Сюда входят значения NULL и повторяющиеся значения. Функция COUNT(ALL expression) оценивает expression для каждой строки в группе и возвращает количество значений, не равных NULL. Функция COUNT(DISTINCT expression) оценивает expression для каждой строки в группе и возвращает количество уникальных значений, не равных NULL. Для возвращаемых значений, больших 2^31-1, функция COUNT формирует сообщение об ошибке. Вместо этого следует использовать COUNT_BIG. Вырезано из http://msdn.microsoft.com/ru-ru/library/ms175997.aspx |
|||
36
Crush
06.03.13
✎
15:28
|
(33) COUNT always returns an int data type value
Вот и оно! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |