使用聚合函数sql查找计数
对于给定的数据,我需要找出工资低于平均工资的id计数使用聚合函数sql查找计数,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,对于给定的数据,我需要找出工资低于平均工资的id计数 id salary 1 11 2 12 2 14 1 12 1 13 1 14 1 15 所以我的最终输出是这样的 id count 1 2 2 1 [id 1的平均薪资为13,id 2的平均薪资为13。因此,id 1中有两个值小于id 2的平均薪资]使用COUNT*分组要计数,请检查其中
id salary
1 11
2 12
2 14
1 12
1 13
1 14
1 15
所以我的最终输出是这样的
id count
1 2
2 1
[id 1的平均薪资为13,id 2的平均薪资为13。因此,id 1中有两个值小于id 2的平均薪资]使用COUNT*分组要计数,请检查其中
select id, count(*)
from tablename
where salary < (select avg(salary) from tablename)
group by id
此查询将为每个ID提供低于平均薪资的薪资计数。
希望您只需要此功能。我倾向于使用窗口功能:
select id, count(*) as cnt
from (select t.*, avg(salary) over (partition by id) as avgs
from table t
) t
where salary < avgs
group by id;
您使用的是哪个版本的Oracle?您将其标记为11g和10G,因为它与ORA-00979错误:having子句中的工资上没有GROUP BY表达式?因此需要select中的countsalary?不,您需要在筛选行之前计算出平均值。也就是说,不能只在having子句中这样做,因为它涉及到聚合列,而salary不是其中之一。就像其他两个建议的答案一样。
select id, count(*) as cnt
from (select t.*, avg(salary) over (partition by id) as avgs
from table t
) t
where salary < avgs
group by id;