|
|
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
Выполняю простое суммирование по всей таблице SELECT SUM(MyField) FROM MyTable WHERE 1=2 Теоретически в результате такой выборки не должно оказаться ни одной записи. Однако, тем не менее в результате появляется одна запись со значением NULL Лечится это добавлением опции GROUP BY Меня интересует это я что-то пропустил или так и должно быть? Да, речь идет о SQLS7SP4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2002, 18:56:02 |
|
||
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
Так ни одной и нет! null это же ничто. и если даже каунт сделать, то будет 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2002, 19:09:26 |
|
||
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
Именно одна запись и должна быть - SUM Вам что-то должна вернуть? Даже если возвращаемое значение NULL. Вы честно спрашиваете - что будет результатом суммирования по пустому набору записей? SQL Вам честно отвечает - результатом будет NULL - но при этом этот самый результат и создает ту самую одну-единственную запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2002, 19:09:29 |
|
||
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
В общем-то логично: и NULL и пустой набор олицетворяют одно и то же. Вопрос представления так сказать. Мне лично больше NULL нравиться - а то пустой набор можно за очередной глюк принять :) Кстати, стандарты (скажем, SQL 92) ничего не говорят на эту тему? И если кто знает, где их можно в электронном виде получить? Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2002, 19:25:29 |
|
||
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
Лично я логики не вижу. Разве что какие-то хвосты от механизма реализации. Т.е. явный баг. Есть принципальная разница - не вернуть ни одной строки или вернуть одну, но со значением NULL. Как минимум, такую ситуацию надо предусмотреть - думаете я спросил потому, что для меня это без разницы? Пришлось вносить изменения в код. sFx Проблема именно в том, что @@RowCount=1, хотя должно быть 0 Alexander_Chepack, jimmers Я бы с Вами согласился, если бы одна запись возвращалась ВСЕГДА, но ведь если я добавляю группировку, то этой записи не появляется! Т.е. получается "здесь читайте, здесь не читайте, а здесь я рыбу заворачивал" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2002, 10:34:19 |
|
||
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Все вполне логично. Первый вариант - группировка отсутствует. Возвращается сумма поля всех строк, удовлетворяющих условию. Строк таких нет, результат - null. И все правильно. Второй вариант - введено поле группировки. В этом случае для каждого уникального значения поля(ей) группировки следует вычислить эту самую сумму. Уникальные значения отсутствуют, рекордсет - пустой. Вам же не кажется странным, что если вы SUM(MyField) замените на Count(MyField), то результатом будет 0? С уважением, Александр Степанов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2002, 11:32:59 |
|
||
|
SUM по всей таблице
|
|||
|---|---|---|---|
|
#18+
Абсолютно не кажется. Count, в отличие от остальных, всегда однозначно знает, сколько обработано строк( в том числе и 0). Да и в BOL про это тоже говорилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2002, 11:57:52 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32037026&tid=1821758]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 436ms |

| 0 / 0 |
