2015-05-01 2 views
0

Я таблицу, как это:Неправильное использование групповой функции в MySQL

+----+------+--------+ 
| 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 

что такое правильный запрос?

+1

Что вы пытаетесь достичь? – Alex

ответ

2

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, забудьте об этом.) Прочтите это.

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

+0

В качестве стороннего варианта доступны медианные UDF и sprocs. – Strawberry

+0

@Strawberry хорошая точка. –

0

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

Смежные вопросы