powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разница сум
9 сообщений из 9, страница 1 из 1
Разница сум
    #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
Разница сум
    #39350039
lux77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
* которые дают к примеру 1000

если суммировать в екселе.
...
Рейтинг: 0 / 0
Разница сум
    #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
Разница сум
    #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
Разница сум
    #39351277
lux77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если есть возможность то можно ли пояснить данную строку (select 1 as x, null as y union all select null, 2 union all select 3, 3) t;
Так как не встречал с такий записью или ето не для постгреса?
...
Рейтинг: 0 / 0
Разница сум
    #39351319
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lux77755= null
ничто не равно null, для этого есть проверка is null
...
Рейтинг: 0 / 0
Разница сум
    #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
Разница сум
    #39351449
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lux77755,

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


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