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
子句中。它们可以出现在 SELECT
和 HAVING
子句中。这就是你出错的原因。
你会想要
SELECT MAX(salary) max_salary,
AVG(salary) avg_salary,
MIN(salary) min_salary
FROM parent
如果您控制自己的 MySQL 服务器并且有一些 MySQL dba 技能,则可以安装用户定义的函数来计算中值。 (如果您使用的是带多租户 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
子句中。它们可以出现在 SELECT
和 HAVING
子句中。这就是你出错的原因。
你会想要
SELECT MAX(salary) max_salary,
AVG(salary) avg_salary,
MIN(salary) min_salary
FROM parent
如果您控制自己的 MySQL 服务器并且有一些 MySQL dba 技能,则可以安装用户定义的函数来计算中值。 (如果您使用的是带多租户 MySQL 服务器的托管服务,请忽略这一点。)阅读此内容。