Сумма вычитания с помощью SubQuery с ошибкой подсчета - PullRequest
0 голосов
/ 02 октября 2019

Я использую Oracle 11G. Мне нужно выполнить запрос, который SUM, а затем вычесть COUNT, используя.

select sum(MyColumn1) -  
(SELECT count(*) FROM MOL.Table2 e WHERE e.MyColumn2=t.Column4)
from mol.Table1 t where t.Column3=SomValue;

Но он выдает SQL Error [937] [42000]: ORA-00937: not a single-group group function.

Ответы [ 3 ]

1 голос
/ 02 октября 2019

CTE помогает и легко читается;пример, основанный на схеме Скотта:

SQL> with
  2  tsum as (select sum(e.sal) csum
  3           from emp e
  4          ),
  5  tcnt as (select count(*)   ccnt
  6           from dept d
  7           where d.deptno <= 30
  8          )
  9  select csum - ccnt
 10  from tsum cross join tcnt;

 CSUM-CCNT
----------
     29022

SQL>
1 голос
/ 02 октября 2019

Вы должны написать это как:

SELECT
  (select sum(MyColumn1) from mol.Table1 where Column3=SomValue) -
  (SELECT count(*) FROM MOL.Table2 e WHERE e.MyColumn2=73  )
from dual
0 голосов
/ 02 октября 2019

используйте другую агрегацию

select sum(MyColumn1) -  
sum((SELECT count(*) FROM MOL.Table2 e WHERE e.MyColumn2=73))
from mol.Table1 where Column3=SomValue;

, потому что ваш (SELECT count(*) FROM MOL.Table2 e WHERE e.MyColumn2=73) этот выбор не используется в группе или агрегации, поэтому вы получили ошибку

, вы можете сделать

 select sum(MyColumn1 -(SELECT count(*) FROM MOL.Table2 e WHERE e.MyColumn2=73))
from mol.Table1 where Column3=SomValue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...