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

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

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
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39960520
Uralan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все перегуглил, не найду решения своей задачи.
...
Рейтинг: 0 / 0
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39960531
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй алиасы в подзапрос добавить.
И зачем группировать по header_id если он в условиях выборки?
...
Рейтинг: 0 / 0
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39960532
Nicolese
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что подзапрос, который выполняется в 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
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39960572
Uralan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nicolese,

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

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

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

Спасибо!

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

Наверное, мешает это условие "AND rd.END_DATE='31/03/2020'".
Мне как раз необходимо выйти за рамки этого условия.
...
Рейтинг: 0 / 0
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39960721
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39960725
Uralan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_
...
Рейтинг: 0 / 0
Обычный подзапрос SUM в предложении SELECT (ORA-00937)
    #39961107
Uralan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бельфя,

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

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


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