powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SUM по всей таблице
8 сообщений из 8, страница 1 из 1
SUM по всей таблице
    #32037019
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполняю простое суммирование по всей таблице

SELECT SUM(MyField) FROM MyTable WHERE 1=2

Теоретически в результате такой выборки не должно оказаться ни одной записи.

Однако, тем не менее в результате появляется одна запись со значением NULL

Лечится это добавлением опции GROUP BY

Меня интересует это я что-то пропустил или так и должно быть? Да, речь идет о SQLS7SP4
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037021
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ни одной и нет! null это же ничто. и если даже каунт сделать, то будет 0
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037022
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно одна запись и должна быть - SUM Вам что-то должна вернуть? Даже если возвращаемое значение NULL.

Вы честно спрашиваете - что будет результатом суммирования по пустому набору записей? SQL Вам честно отвечает - результатом будет NULL - но при этом этот самый результат и создает ту самую одну-единственную запись.
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037026
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то логично: и NULL и пустой набор олицетворяют одно и то же. Вопрос представления так сказать. Мне лично больше NULL нравиться - а то пустой набор можно за очередной глюк принять :)

Кстати, стандарты (скажем, SQL 92) ничего не говорят на эту тему? И если кто знает, где их можно в электронном виде получить?

Удачи
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037086
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я логики не вижу. Разве что какие-то хвосты от механизма реализации. Т.е. явный баг.

Есть принципальная разница - не вернуть ни одной строки или вернуть одну, но со значением NULL. Как минимум, такую ситуацию надо предусмотреть - думаете я спросил потому, что для меня это без разницы? Пришлось вносить изменения в код.

sFx
Проблема именно в том, что @@RowCount=1, хотя должно быть 0

Alexander_Chepack, jimmers
Я бы с Вами согласился, если бы одна запись возвращалась ВСЕГДА, но ведь если я добавляю группировку, то этой записи не появляется! Т.е. получается "здесь читайте, здесь не читайте, а здесь я рыбу заворачивал"
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037120
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Все вполне логично.

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

Второй вариант - введено поле группировки. В этом случае для каждого уникального значения поля(ей) группировки следует вычислить эту самую сумму. Уникальные значения отсутствуют, рекордсет - пустой.

Вам же не кажется странным, что если вы SUM(MyField) замените на Count(MyField), то результатом будет 0?

С уважением,
Александр Степанов.
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037127
Tulkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолютно не кажется.
Count, в отличие от остальных, всегда однозначно знает, сколько обработано строк( в том числе и 0).
Да и в BOL про это тоже говорилось.
...
Рейтинг: 0 / 0
SUM по всей таблице
    #32037137
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а что тогда должен выдавать такой запрос?
Код: plaintext
1.
SELECT SUM(MyField), count(*) FROM MyTable WHERE  1 = 2  

Здесь же null на месте суммы выглядит вполне логично.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SUM по всей таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]