Выберите количество и количество максимальных значений, которые больше одного - PullRequest
0 голосов
/ 19 марта 2019

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

Пока у меня есть следующий запрос:

select 
subj.inventoryNum as Inventory,
extract(month from subj.createDate) as month,
oolame.schoolCode as Code,
count(case when max(subVers.verNum) > 0 then 1 end) as deleted,
count(case when subVers.delDate is not null then 1 end) as changed

from 
Subjects subj
inner join SubjectVersions subVers on subVers.subjFk = subj.subjId
inner join SchoolName oolame on oolame.oolameId = subj.oolameFk 

group by 
subj.inventoryNum,
extract(month from subj.createDate),
oolame.schoolCode;

Это дает мне следующую ошибку:

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:    
*Action:
Error at Line: 2 Column: 1

1 Ответ

1 голос
/ 19 марта 2019

Что вы хотите сделать, немного неясно. Хотите ли вы общий максимум? Максимум на предмет? Какой-то другой максимум?

В любом случае вы можете использовать оконную функцию в подзапросе, чтобы получить максимум. Например, если вы хотите максимум по предмету:

select subj.inventoryNum as Inventory,
       extract(month from subj.createDate) as month,
       oolame.schoolCode as Code,
       sum(case when subVers.max_verNum > 0 then 1 else 0 end) as deleted,
       count(subVers.delDate) as changed
from Subjects subj inner join
     (select subvers.*,
             max(subVers.verNum) over (partition by subVers.subjFk) as max_verNum
      from SubjectVersions subVers
     ) subVers
     on subVers.subjFk = subj.subjId inner join
     SchoolName oolame
     on oolame.oolameId = subj.oolameFk 
group by subj.inventoryNum,
         extract(month from subj.createDate),
         oolame.schoolCode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...