Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разница сум / 9 сообщений из 9, страница 1 из 1
18.11.2016, 17:44
    #39350028
lux77755
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
Здравствуйте... попрошу помочь понять в чем проблема.
Есть виражения для вывода
round((b_d * b_a)::numeric,2) as b,
round((s_d * s_a)::numeric,2) as s,
round((t_d * c)::numeric,2) as t,

которые дают к примеру 1000

а в следующей строчке я их симирую вот так

(round((b_d * b_a)::numeric,2)
+ round((s_d * s_a)::numeric,2)
+ round((t_d * c)::numeric,2)) as suma

и результат уже 900

Помогите разобраться. Спасибо.
...
Рейтинг: 0 / 0
18.11.2016, 17:50
    #39350039
lux77755
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
* которые дают к примеру 1000

если суммировать в екселе.
...
Рейтинг: 0 / 0
18.11.2016, 21:14
    #39350143
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
lux77755,

покажите полностью запросы. я подозреваю что над указанными значениями считается сумма и какие-то из них являются null. а null +something это null. пример:

Код: sql
1.
2.
3.
4.
5.
select sum(x), sum(y), sum(x+y) from
(select 1 as x, null as y union all select null, 2 union all select 3, 3) t;
 sum | sum | sum
-----+-----+-----
   4 |   5 |   6
...
Рейтинг: 0 / 0
21.11.2016, 16:43
    #39351243
lux77755
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
Спасибо за Ваш ответ. Попробовал обойти наличие null. Но видимо чтото не правильно на суму опять не выхожу.
((case when round((b_d * b_a)::numeric,2) = NULL
then 0
else round((b_d * b_a)::numeric,2)
end)
+
(case when round ((s_d * s_a)::numeric,2) = NULL
then 0
else round ((s_d * s_a)::numeric,2)
end)
+
(case when round ((t_d * c)::numeric,2) = NULL
then 0
else round ((t_d * c)::numeric,2)
end)
) as ca
...
Рейтинг: 0 / 0
21.11.2016, 17:22
    #39351277
lux77755
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
если есть возможность то можно ли пояснить данную строку (select 1 as x, null as y union all select null, 2 union all select 3, 3) t;
Так как не встречал с такий записью или ето не для постгреса?
...
Рейтинг: 0 / 0
21.11.2016, 18:02
    #39351319
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
lux77755= null
ничто не равно null, для этого есть проверка is null
...
Рейтинг: 0 / 0
21.11.2016, 18:02
    #39351321
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
lux77755,

с null нельзя сравнивать через оператор равенства (результат будет null и всегда будет выбираться else ветка в case), нужно через is null. а вообще посмотрите функцию coalesce.

lux77755если есть возможность то можно ли пояснить данную строку (select 1 as x, null as y union all select null, 2 union all select 3, 3) t;
Так как не встречал с такий записью или ето не для постгреса?

для постгреса, выполните подзапрос и увидите 3 строки с тестовыми данными. а что именно смущает? отсутствие from?
...
Рейтинг: 0 / 0
21.11.2016, 20:19
    #39351449
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
lux77755,

для того что вы пытаетесь сдлать есть функция COALESCE(round((b_d * b_a)::numeric,2), 0)
...
Рейтинг: 0 / 0
22.11.2016, 09:41
    #39351607
lux77755
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница сум
Огромное спасибо... проверка типа is null Помогла и исправила ошибку!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разница сум / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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