powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Общая сумма всех операций
10 сообщений из 10, страница 1 из 1
Общая сумма всех операций
    #39876359
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, есть простой запрос на выборку данных. Нужно добавить проверку, если общая сумма всех операций больше 3000, тогда мы выводим эти данные, если меньше данные не выводим. (Изначально пробовал реализовать через having, не получилось)
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876364
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
elimpion,

case when blablablabla > 3000 then blablablabla else null end
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876368
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну или для группировки:
case when sum(blablablabla) > 3000 then sum(blablablabla) else null end
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876378
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elimpion (Изначально пробовал реализовать через having, не получилось)
все зависит от запроса
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as
 (select 4 a, 1 b from dual
  union
  select 6, 1 from dual union
select 1 a, 2 b from dual
  union
  select 3, 2 from dual)
select sum(a)
from   t
group by b
having sum (a) > 5
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876386
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вижу 2 варианта:
1) Через подзапрос.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q (rn, amt, id) as (select 1, 100, 1 from dual union all
select 2, 200, 1 from dual union all
select 3, 200, 2 from dual union all
select 4, 200, 2 from dual union all
select 5, 700, 2 from dual)

select * from
(select rn, id, amt, case when sum(amt) OVER(partition by id order by 1) > 400 then 1 else 0 end as z from q)
where z = 1



2) Через минус.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q (rn, amt, id) as (select 1, 100, 1 from dual union all
select 2, 200, 1 from dual union all
select 3, 200, 2 from dual union all
select 4, 200, 2 from dual union all
select 5, 700, 2 from dual)

select rn, id, amt, case when sum(amt) OVER(partition by id order by 1) > 400 then 1 else 0 end from q
MINUS
select rn, id, amt, case when sum(amt) OVER(partition by id order by 1) > 400 then 2 else 0 end from q
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876388
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй, ваш запрос вывел сумму поле A, это не правильно, он должен был проверить что общая сумма больше 5, если больше тогда выводим все данные
Код: plsql
1.
2.
3.
4.
5.
6.
select 4 a, 1 b from dual
  union
  select 6, 1 from dual union
select 1 a, 2 b from dual
  union
  select 3, 2 from dual
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876410
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался, через over PARTITION BY нахожу общую сумму потом проверяю ее
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876419
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo2) Через минус.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q (rn, amt, id) as (select 1, 100, 1 from dual union all
select 2, 200, 1 from dual union all
select 3, 200, 2 from dual union all
select 4, 200, 2 from dual union all
select 5, 700, 2 from dual)

select rn, id, amt, case when sum(amt) OVER(partition by id order by 1) > 400 then 1 else 0 end from q
MINUS
select rn, id, amt, case when sum(amt) OVER(partition by id order by 1) > 400 then 2 else 0 end from q

Виртуоз!
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876429
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadВиртуоз!Я бы сказал менее завуалировано.
...
Рейтинг: 0 / 0
Общая сумма всех операций
    #39876478
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Допили свой первый вариант, убрав сортировку и case-обертку, вынеси сравнение суммы во внешнюю часть запроса.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Общая сумма всех операций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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