Oracle SQL总和数

时间:2018-04-02 17:38:55

标签: sql oracle

我试图使用case语句得到一个总和的计数,我得到以下错误 -

not a single-group function

是否可以计算总和?

计数(总和(ern.hours)> 0然后1结束时的情况)

3 个答案:

答案 0 :(得分:0)

您可以在子查询中执行customer_id,然后执行以下操作:

SUM(ern.hours)

一个例子:

SUM(CASE WHEN hours_sum > 0 THEN 1 ELSE 0 END)

答案 1 :(得分:0)

当然可以做你喜欢的事情。但这真的是你想要做的吗?

以下是基于SCOTT模式中的EMP表的示例。该表显示了三个部门的14名员工(14行)。我会指望佣金总额大于零的部门:

select   count(case when sum(comm) > 0 then 1 end) as depts_with_commissions
from     scott.emp
group by deptno
;

DEPTS_WITH_COMMISSIONS
----------------------
                     1

我没有看到查询在此引发错误。也许你也在同一个SELECT条款中选择其他东西?

结果是正确的:只有部门30的员工才有佣金。

select   empno, ename, deptno, comm
from     scott.emp
order by deptno, comm
;

     EMPNO ENAME          DEPTNO       COMM
---------- ---------- ---------- ----------
      7782 CLARK              10           
      7839 KING               10           
      7934 MILLER             10           
      7566 JONES              20           
      7902 FORD               20           
      7876 ADAMS              20           
      7369 SMITH              20           
      7788 SCOTT              20           
      7844 TURNER             30          0
      7499 ALLEN              30        300
      7521 WARD               30        500
      7654 MARTIN             30       1400
      7900 JAMES              30           
      7698 BLAKE              30           

答案 2 :(得分:0)

试试这个:

select count(count(1)) MGR_WITH_MORE_THAN_1_SUB
  from scott.emp
 group by mgr
having count(1) > 1;

MGR_WITH_MORE_THAN_1_SUB
------------------------
                       3

它计算超过1个直接下属的经理人数,但它依赖于嵌套聚合函数的怪癖。

虽然这个

select count(sum(comm)) DEPTS_WITH_COMMISSIONS
  from scott.emp
 group by DEPTNO
having sum(comm) > 0;

DEPTS_WITH_COMMISSIONS
----------------------
                     1

使用相同的怪癖计算佣金大于0的部门。