我试图使用case语句得到一个总和的计数,我得到以下错误 -
not a single-group function
是否可以计算总和?
计数(总和(ern.hours)> 0然后1结束时的情况)
答案 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的部门。