2016-12-13 2 views
0

У меня есть выбериORA-00937: - «не одногрупповая группа функция»

select distinct 
    min(trunc(ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4)) + (ALL_SUBS_DAY.CHARGE_AMT - sum(trunc(ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4))) as CHARGE_AMT 
from table names; 

, когда я пытаюсь запустить его я не функцию групповой одной группы. Если я это сделать, как этот

select 
    min(trunc(ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4)) + (ALL_SUBS_DAY.CHARGE_AMT - sum(trunc(ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4))) as CHARGE_AMT 
from table names 
group by SUBS_DAY.CHARGE_AMT, SUP.SHARE_USAGE; 

это работает. Разве я не должен был работать как группа? Нужно ли мне перечислять каждый столбец или есть способ не делать этого?

+0

Посмотрите на [этот вопрос] (http://stackoverflow.com/questions/164319/is-there-any-difference-between-group-by-and-distinct). – Aleksej

ответ

1

Вопрос относится к ALL_SUBS_DAY.CHARGE_AMT.
Вы не группируете его и не используете на нем агрегатную функцию.

+ (ALL_SUBS_DAY.CHARGE_AMT - sum(

выберите отчетливый мин (TRUNC (ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4)) + (ALL_SUBS_DAY.CHARGE_AMT - сумма (TRUNC (ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4))), как CHARGE_AMT из имен таблиц;


DISTINCT работает как группа лишь, если вы группа по всем столбцам/выражениям и выбрать все столбцы/выражение, например, -

select distinct a,b,c,d,e from t; 

=

select a,b,c,d,e from t group by a,b,c,d,e; 

Ваш первый запрос возвращает одну строку, так как вы не сделали агрегат ничем, что делает distinct бессмысленным.

+0

sum (trunc (ALL_SUBS_DAY.CHARGE_AMT * SUP.SHARE_USAGE, 4))). не является агрегированной функцией? –

+0

@EugeneCuz, это не то место, где я указал вам. Этот столбец появляется более одного раза. –