ОШИБКА 1140 (42000) В агрегированном запросе без GROUP BY, выражение # 1 - PullRequest
0 голосов
/ 16 января 2019

У меня вопрос от https://www.hackerrank.com/challenges/earnings-of-employees/problem

Ниже приведены входные данные:

enter image description here

Вопрос просит найти максимальный заработок (месяцы * зарплата) и общее количество строк с максимальным заработком.

Моя попытка:

select distinct salary*months, count(*)
from employee
where salary*months = (select max(salary*months) from employee)

Это дает мне сообщение об ошибке:

ОШИБКА 1140 (42000) в строке 6: В агрегированном запросе без GROUP BY выражение # 1 списка SELECT содержит неагрегированный столбец 'run_byli4vf7yqz.employee.salary'; это несовместимо с sql_mode = only_full_group_by`

Есть предложения, почему я потерпел неудачу?

1 Ответ

0 голосов
/ 16 января 2019

Не используйте select distinct:

select (e.salary * e.months), count(*)
from employee e
where (e.salary * e.months) = (select max(e2.salary * e2.months)
                               from employee e2
                              )
group by (e.salary * e.months);

Сообщение довольно ясно.У вас есть count(*), поэтому ваш запрос является запросом агрегации.Однако у вас есть неагрегированный столбец, поэтому MySQL сбит с толку: хотите агрегировать или нет?Отсюда и ошибка.

Вы также можете написать это как:

select (e.salary * e.months), count(*)
from employee e
group by (e.salary * e.months)
order by (e.salary * e.months) desc
limit 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...