繁体   English   中英

MySQL-滥用汇总函数

[英]MySQL- Misuse of aggregate function

我一直在尝试运行以下命令:

select s.name, s.nr
from sub s
group by s.name
having (select count(s.name) from sub s group by s.name) > 
10 * (select avg(count(s.name)) from sub s group by s.name)

为了获得所有用户的姓名和电话号码,这些用户的平均通话次数是每个用户的10倍以上。

select avg(count(s.name)) from sub s group by s.name我在做什么?

可能是这样的:

select s.name, s.nr
from sub s
group by s.name, s.nr
having count(*) > 10 * (
    select avg(cnt)
    from (
        select count(*) as cnt
        from sub
        group by name, nr
     )x

您还可以通过单个(非嵌套)子查询获得平均计数:

select count(*) / count(distinct name, nr) from sub

读取为: 所有行数/不同组的数量 -这是每个组的平均行数。

因此,您的完整查询将是:

select s.name, s.nr
from sub s
group by s.name, s.nr
having count(*) > 10 * (select count(*) / count(distinct name, nr) from sub)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM