SQL - Выберите СУММУ с другими математическими операциями - PullRequest
1 голос
/ 07 апреля 2020

В операторе выбора у меня есть математические операции c, связанные с SUM (). Например,

select SUM(A * (B) / C) - (D + E + F) 
from   MyTable
where  cond1 = cond1
and    cond2 = cond2;

При запуске под SQLDev запрашивается опция GROUP BY , которая не требуется. При его добавлении появляется другое сообщение об ошибке.

Может кто-нибудь помочь?

Ответы [ 3 ]

0 голосов
/ 07 апреля 2020

Ваше выражение содержит агрегацию SUM(A * (B) / C) по всем строкам, что приводит к одной строке результата (из-за отсутствия условия GROUP BY).

Также содержит (D + E + F), которые кажутся значениями находится в одной строке.

СУБД жалуется, что не знает, из какой строки взять значения D, E и F.

Возможно, вы хотите суммировать полное выражение SUM((A * (B) / C) - (D + E + F) )

0 голосов
/ 07 апреля 2020

Существуют различные варианты того, что вы можете захотеть. Вот три варианта:

select SUM(A * (B) / C) - (D + E + F) 
from   MyTable
where  cond1 = cond1 and cond2 = cond2
group by (D + E + F);

Или:

select SUM(A * (B) / C) - SUM(D + E + F) 
from   MyTable
where  cond1 = cond1 and cond2 = cond2;

Или:

select SUM(A * (B) / C) - (max(D) + max(E) + max(F)) 
from   MyTable
where  cond1 = cond1 and cond2 = cond2;

Вы не предоставили пример данных и желаемых результатов, поэтому Трудно сказать, какие из них (или их вариации) могут быть тем, чем вы действительно хотите.

0 голосов
/ 07 апреля 2020

У вас есть столбцы A, B и C в функции SUM (). Но D, E и F не в сумме (). Вы должны столбцы GROUP BY, которые не в SUM, то есть таблицы D, E, F

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...