我的问题来自https://www.hackerrank.com/challenges/earnings-of-employees/problem
下面是输入数据:
该问题要求找到最大收入(月*薪水)和具有最大收入的行总数。
我的尝试是:
select distinct salary*months, count(*)
from employee
where salary*months = (select max(salary*months) from employee)
这给了我错误消息:
第6行的错误1140(42000):在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列'run_byli4vf7yqz.employee.salary';这与sql_mode = only_full_group_by`
不兼容
有人建议我失败了吗?
答案 0 :(得分:1)
请勿使用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;