Группировка в подзапросе не работает, как ожидалось - PullRequest
0 голосов
/ 06 октября 2019

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

  create table test
  (
     type varchar2(4),
     val number(5),
     output number(1)
   );
  insert into test values('AB',2,0);
  insert into test values('AB',5,0);
  insert into test values('AB',6,1);
  insert into test values('AB',2,1);
  insert into test values('BC',1,0);
  insert into test values('BC',4,1);
  insert into test values('BC',6,0);

  select t.type,ti.total as totalcount,count(*) as passcount
    ,'PASS' as status 
  from test t, 
       (select type,count(*) as total 
        from test 
        group by type) ti 
   where t.output=0 and t.type=ti.type 
   group by t.type;

Выдает ошибку ниже. ORA-00979: не выражение GROUP BY.

Я ожидаю, что общее количество по группам будет подсчитано и передано в выводе http://sqlfiddle.com/#!4/9ef3f7/23 Скриптовая ссылка

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Я хочу подсчитать итоговые и пропущенные строки.

Я думаю, что вы хотите простой запрос агрегации:

select t.type, count(*) as total,
       sum(t.output) as num_passed -- presumably "1" is pass
from test t
group by t.type;

Предполагается, что "1"за "пройдено". Если передано «0», вы можете использовать:

sum(1 - t.output) as num_passed

Если логика более сложная, используйте case:

sum(case when t.output = 1 then 1 else 0 end) as num_passed
0 голосов
/ 06 октября 2019

Поиск типов по крайней мере с одним 1 ("хорошо") output, общее количество и пройдено

select 
  type, count(*) as total, sum(output) as passedCount
   , 'PASS' as status 
from test t
having max(output)=1 
group by t.type;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...