MySQL中为何无法嵌套使用MAX(COUNT(*))却可正常使用ROUND(AVG(abc))?
MySQL 中
MAX(COUNT(*))无法直接使用的原因 - 首先要区分两类函数的执行逻辑:
COUNT()、MAX()、AVG()都属于聚合函数,运行时需要接收多行数据的某一列值作为输入,聚合计算后返回单个结果;而ROUND()属于标量函数,只需要接收单个数值作为输入,返回处理后的单个数值即可。
- 为什么
ROUND(AVG(abc))可以正常运行:AVG(abc)执行后会返回所有行abc字段的平均值(单个数值),刚好符合ROUND()的参数要求,相当于给ROUND()传入了一个普通数值,自然可以正常计算。
- 为什么
MAX(COUNT(*))会报错:COUNT(*)本身是聚合函数,执行后已经返回了单个计数值,而MAX()作为聚合函数,需要的输入是多行数据的某一列值,不是单个已经聚合完成的数值。直接写MAX(COUNT(*))的话,MAX()没有可供遍历计算最大值的多行数据集,MySQL无法识别这种语法。
如果需要实现「求分组后计数结果的最大值」的需求,可以先嵌套子查询完成分组计数,再在外层求最大值,示例代码如下:
SELECT MAX(group_count) FROM ( -- 先按分组字段统计每个分组的行数 SELECT COUNT(*) AS group_count FROM 你的表名 GROUP BY 你要分组的字段 ) AS temp_table;
内容的提问来源于stack exchange,提问作者PMH8
相关产品推荐
相关产品推荐

