Mysql 我们可以在聚合函数中使用聚合函数吗?

Mysql 我们可以在聚合函数中使用聚合函数吗?,mysql,sql,database,Mysql,Sql,Database,在这里,我试图使用聚合函数中的聚合函数找出第四个最大工资。它显示了一个错误,即组函数的使用无效 有什么问题吗?请帮忙 谢谢。不,你不能那样做。相反,您可以按薪资降序排序,然后将结果限制为4条记录,并检索最少一条: select max(salary) from employ where salary < ( select max(salary) from employ having count(max(salary)>

在这里,我试图使用聚合函数中的聚合函数找出第四个最大工资。它显示了一个错误,即组函数的使用无效

有什么问题吗?请帮忙


谢谢。

不,你不能那样做。相反,您可以按薪资降序排序,然后将结果限制为4条记录,并检索最少一条:

select max(salary)
from employ
where salary < ( select max(salary)
                 from employ
                 having count(max(salary)>salary)=3);

不,你不能那样做。相反,您可以按薪资降序排序,然后将结果限制为4条记录,并检索最少一条:

select max(salary)
from employ
where salary < ( select max(salary)
                 from employ
                 having count(max(salary)>salary)=3);

最简单的方法是只使用限制:


最简单的方法是只使用限制:


为什么我们不能在聚合函数中使用聚合函数?@VarunTeja:从逻辑上讲,因为它们是在不同的数据集上计算的。count和max的不同数据集是什么?@VarunTeja在您的情况下,它甚至没有意义——因为在您的查询中,聚合是在整个数据集上执行的,如果没有GROUPBY,则始终只返回一行,因此如果正确实现,则可能的count将始终返回1。通过不同的数据集,我的意思是,例如,有时你必须找到所有员工总工资最高的部门,因此,首先你应该找到每个部门的总工资数据集1,然后再找到maximumdataset2。为什么我们不能在聚合函数中使用聚合函数?@VarunTeja:嗯,从逻辑上讲,因为它们是在不同的数据集上计算的。count和max的不同数据集是什么?@VarunTeja好吧,在您的情况下,这根本没有意义——因为在您的查询中,聚合是在整个数据集上执行的,没有分组依据,所以始终只返回一行,因此如果实现正确,可能会进行计数,将始终返回1。通过不同的数据集,我的意思是,例如,有时你必须找到所有员工总工资最高的部门,因此,首先你应该找到每个部门的总工资数据集1,然后再找到maximumdataset2。我忘记了抵销选项我忘记了抵销选项
select max(salary) as salary
from employ
order by salary desc
limit 3, 1;