我今天的问题是这样的:
有多少客户高于平均水平? 我这样回答但是错了
select avg(height), count(*) as numofppl
from client
group by height
having height > avg(height)
有人可以提供不同的解决方案(谁工作:))
答案 0 :(得分:2)
select count(*) as numofppl
from client
where height > ( select avg(height) from client )
答案 1 :(得分:0)
尝试此查询
count(*)
统计height > avg height
select count(*) as numofppl from client where height > ( select avg(height) from client )
答案 2 :(得分:0)
按高度分组。所以你得到一行高度100,一个高度200,等等。现在你问每组的平均值是多少,但是组高100的所有记录都有高度= 100,所以平均值是100。由于having height > avg(height)
,having height > height
在查询中只是group by height
。
然而,你想要比较的不是每个身高的平均值,而是总的平均值:没有GROUP BY
因此:
select count(*)
from client
where height > (select avg(height) from client);
如果要显示平均高度,请加入:
select x.avg_height, count(*)
from client c
cross join (select avg(height) as avg_height from client) x
where c.height > x.avg_height;
(根据DBMS,您可能必须使用x.avg_height
上的汇总功能,例如select max(x.avg_height)
。)