首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组函数在mysql中的无效使用

问组函数在mysql中的无效使用
EN

Stack Overflow用户
提问于 2015-05-01 12:46:00
回答 2查看 56关注 0票数 0

我有张这样的桌子:

代码语言:javascript
复制
+----+------+--------+
| id | name | salary |
+----+------+--------+
|  1 | Ajay |  20000 |
|  2 | Aja  |   2000 |
|  3 | Aj   |    200 |
|  4 | A    |   3000 |
|  5 | q    |  30000 |
+----+------+--------+  

我想要写一个查询,可以打印最高工资,中等工资和最低工资。所以我写了这个查询:

代码语言:javascript
复制
select salary 
  from parent
 where max(sal) 
    && salary < ( SELECT MAX( salary )
                   FROM parent ) 
    && min(salary);  

mysql返回了一个错误:

代码语言:javascript
复制
ERROR 1111 (HY000): Invalid use of group function  

什么是正确的查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-01 12:54:20

遗憾的是,MySQL没有提供聚合函数来获取中值。希望您可以使用平均值(算术平均值)。

MAX()、MIN()和AVG() (在WHERE术语中称为聚合函数)等东西不能出现在WHERE子句中。它们可以出现在SELECT和HAVING子句中。这就是你犯错误的原因。

你会想要

代码语言:javascript
复制
SELECT MAX(salary) max_salary, 
       AVG(salary) avg_salary,
       MIN(salary) min_salary
  FROM parent

如果您控制您自己的MySQL服务器,并且您有一些MySQL dba裁剪,您可以安装一个用户定义的函数来计算中值。(如果您使用的是多租户MySQL服务器的托管服务,请忘记这一点。)看看这个。

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

票数 2
EN

Stack Overflow用户

发布于 2015-05-01 12:50:42

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29987095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档