mysql 中组函数的使用无效

Invalid use of group function in mysql

我有一个 table 这样的:

+----+------+--------+
| id | name | salary |
+----+------+--------+
|  1 | Ajay |  20000 |
|  2 | Aja  |   2000 |
|  3 | Aj   |    200 |
|  4 | A    |   3000 |
|  5 | q    |  30000 |
+----+------+--------+  

我想写一个可以打印最高薪水、中等薪水和最低薪水的查询。所以我写了这个查询:

select salary 
  from parent
 where max(sal) 
    && salary < ( SELECT MAX( salary )
                   FROM parent ) 
    && min(salary);  

并且mysql返回错误:

ERROR 1111 (HY000): Invalid use of group function  

正确的查询是什么?

select 'min' as k, min(salary) as v from parent union select 'avg' as k, avg(salary) as v from parent union select 'max' as k, max(salary) as v from parent

MySQL 不提供聚合函数来获取中值,抱歉。希望您可以使用平均值(算术平均值)。

诸如MAX()MIN()AVG()之类的东西(在SQL的行话中称为聚合函数)可以' 出现在 WHERE 子句中。它们可以出现在 SELECTHAVING 子句中。这就是你出错的原因。

你会想要

SELECT MAX(salary) max_salary, 
       AVG(salary) avg_salary,
       MIN(salary) min_salary
  FROM parent

如果您控制自己的 MySQL 服务器并且有一些 MySQL dba 技能,则可以安装用户定义的函数来计算中值。 (如果您使用的是带多租户 MySQL 服务器的托管服务,请忽略这一点。)阅读此内容。

http://mysql-udf.sourceforge.net/