Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обычный подзапрос SUM в предложении SELECT (ORA-00937) / 11 сообщений из 11, страница 1 из 1
22.05.2020, 00:09
    #39960516
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Добрый день!

Подскажите, пожалуйста, никак не пойму, уже много времени "бьюсь":

1)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
sum(rd.AMOUNT),
--(SELECT sum(REWARD_AMT) FROM r_data WHERE INITIAL_DATE BETWEEN '01/03/2020' AND '31/03/2020' AND HEADER_ID=8375571 GROUP BY HEADER_ID),
sum(rd.REWARD_AMT)
FROM r_data rd
WHERE 1=1
AND rd.END_DATE='31/03/2020'
AND rd.HEADER_ID=8375571--работает



2)
Код: plsql
1.
SELECT sum(REWARD_AMT) FROM r_data WHERE INITIAL_DATE BETWEEN '01/03/2020' AND '31/03/2020' AND HEADER_ID=8375571 GROUP BY HEADER_ID--работает



Вкупе нет:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
sum(rd.AMOUNT),
(SELECT sum(REWARD_AMT) FROM r_data WHERE INITIAL_DATE BETWEEN '01/03/2020' AND '31/03/2020' AND HEADER_ID=8375571 GROUP BY HEADER_ID),
sum(rd.REWARD_AMT)
FROM r_data rd
WHERE 1=1
AND rd.END_DATE='31/03/2020'
AND rd.HEADER_ID=8375571



Ругается на агрегат подзапроса:
ORA-00937: групповая функция не является одногруппной
00937. 00000 - "not a single-group group function"

Модератор: Используйте тег SRC для выделения кода
...
Рейтинг: 0 / 0
22.05.2020, 00:14
    #39960520
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Все перегуглил, не найду решения своей задачи.
...
Рейтинг: 0 / 0
22.05.2020, 01:02
    #39960531
Бельфя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Попробуй алиасы в подзапрос добавить.
И зачем группировать по header_id если он в условиях выборки?
...
Рейтинг: 0 / 0
22.05.2020, 02:04
    #39960532
Nicolese
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Потому что подзапрос, который выполняется в select'e выполняется для каждой строчки внешнего основного запроса. Затем выполняется группировка основного запроса по всем строкам, т.к. для одного поля написано SUM() . Но написанный подзапрос он не может аггрегировать, т.к. не указана аггрегирующая функция. Это то же самое что если написать
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT
sum(rd.AMOUNT),
rd.HEADER_ID
FROM r_data rd
WHERE 1=1
AND rd.END_DATE='31/03/2020'
AND rd.HEADER_ID=8375571



Попробуй так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
sum(rd.AMOUNT),
MAX/*min,sum,avg*/((SELECT sum(REWARD_AMT) FROM r_data WHERE INITIAL_DATE BETWEEN '01/03/2020' AND '31/03/2020' AND HEADER_ID=8375571 GROUP BY HEADER_ID)),
sum(rd.REWARD_AMT)
FROM r_data rd
WHERE 1=1
AND rd.END_DATE='31/03/2020'
AND rd.HEADER_ID=8375571
...
Рейтинг: 0 / 0
22.05.2020, 09:31
    #39960572
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Nicolese,

я понял, спасибо огромное!

Работает!
...
Рейтинг: 0 / 0
22.05.2020, 13:03
    #39960683
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Uralan
Работает!

Ваша задача решается иначе:
Код: plsql
1.
2.
3.
...
, sum(case when INITIAL_DATE >= date '2020-03-01' then REWARD_AMT end)
...
...
Рейтинг: 0 / 0
22.05.2020, 13:46
    #39960713
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
andrey_anonymous,

Спасибо!

Проверю, вернусь.
...
Рейтинг: 0 / 0
22.05.2020, 13:50
    #39960715
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Отрабатывает, но результаты разнятся с предыдущим успехом.

Наверное, мешает это условие "AND rd.END_DATE='31/03/2020'".
Мне как раз необходимо выйти за рамки этого условия.
...
Рейтинг: 0 / 0
22.05.2020, 14:02
    #39960721
Бельфя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT
sum(case rd.END_DATE when '31/03/2020' then rd.AMOUNT end),
sum(case when INITIAL_DATE BETWEEN '01/03/2020' AND '31/03/2020' then rd.REWARD_AMT end),
sum(case rd.END_DATE when '31/03/2020' then rd.REWARD_AMT end)
FROM r_data rd
WHERE 1=1
AND rd.HEADER_ID=8375571
...
Рейтинг: 0 / 0
22.05.2020, 14:14
    #39960725
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
_
...
Рейтинг: 0 / 0
23.05.2020, 18:02
    #39961107
Uralan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
Бельфя,

так тоже работает, нужно подучить конструкцию case.

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


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