SQL聚合函数子查询

4
我想要做的是统计子查询返回的行数,实际上就是以下内容:
select pp.prop_id, COUNT((select employee_id from employee e where e.ao1_hours > 0))
  from proposal_piece pp

  group by pp.prop_id
  order by pp.prop_id

这是我的错误信息:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

为什么这不起作用?如果选择只返回带有筛选条件的一堆employee_id,那么为什么我不能计算返回的行数或employee_id的数量?

我想要计算具有 ao1_hours > 0 的不同员工数。按prop分组。

这里是关于我的数据库的一些结构信息,作为查询的一部分。

    from proposal_piece pp
    INNER JOIN employee e
    on pp.employee_id = e.employee_id

谢谢!


2
结果将显示具有相同雇员数量的每个prop_id。这就是你要寻找的吗? - Holger Brandt
不,我想要计算ao1_hours大于0的不同员工数量。按属性分组。 - CodeKingPlusPlus
你能给一个预期结果的数据样本吗? - anouar.bagari
我刚刚编辑了我的帖子,解释了我想要的内容。 - CodeKingPlusPlus
你应该连接员工表和提案条目表。这两个表如何相关? - Bishnu Paudel
员工表中是否有任何列参考了prop_id? - anouar.bagari
1个回答

5

试试这个

select pp.prop_id, 
      (select COUNT(employee_id) 
       from employee e 
       where e.ao1_hours > 0 and e.employee_id = pp.employee_id) as nb_employees
from proposal_piece pp      
order by pp.prop_id   

或者这个

select pp.prop_id, count(e.employee_id) as nb_employees  
from proposal_piece pp inner join employee e 
     on pp.employee_id = e.employee_id
where e.ao1_hours > 0
group by pp.prop_id
order by pp.prop_id

@PhaDaPhunk 你是什么意思? - anouar.bagari
我正在输入完全相同的东西。 - phadaphunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接