Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用别名在having子句中使用子查询_Mysql_Sql - Fatal编程技术网

Mysql 使用别名在having子句中使用子查询

Mysql 使用别名在having子句中使用子查询,mysql,sql,Mysql,Sql,我有一个Mysql查询,在哪里 其中我有一个如下表(示例数据) 现在我想找出工资总额最高的员工人数 (工资总额=月*工资) 我的问题是这样的 子查询: ((select max(mon_sal.mc) as max_mc from ( select months*salary as mc from employee group by employee_id) as mon_sal) as max_mon_sal) //找到总工资的最大值 现在我的问题是我需要找到最高工资的人数 select

我有一个Mysql查询,在哪里

其中我有一个如下表(示例数据)

现在我想找出工资总额最高的员工人数 (工资总额=月*工资)

我的问题是这样的

子查询:

((select max(mon_sal.mc) as max_mc from (
  select months*salary as mc from employee group by employee_id) as mon_sal)
as max_mon_sal)
//找到总工资的最大值

现在我的问题是我需要找到最高工资的人数

select max_mon_sal.max_mc,name 
from employee group by employee_id 
having salary=max_mon_sal.max_mc from (
    (select max(mon_sal.mc) as max_mc from 
      (select months*salary as mc from employee group by employee_id) as mon_sal)
    as max_mon_sal)

它的显示错误。我在使用max\u mon\u sal别名时遇到问题。请提出建议。

我不确定这是否是我们正在寻找的,甚至更好的解决方案是使用临时表:

SELECT Employee.employee_id,SUM(MONTHs * salary) 
FROM Employee,
   ( 
      SELECT MAX(total) value FROM (
           SELECT SUM(MONTHs * salary) as total
           FROM Employee
           GROUP BY employee_id
      ) T
   ) D
   GROUP BY Employee.employee_id,D.value
   HAVING SUM(MONTHs * salary)  = D.value

我不确定这是否是我们正在寻找的,甚至更好的解决方案是使用临时表:

SELECT Employee.employee_id,SUM(MONTHs * salary) 
FROM Employee,
   ( 
      SELECT MAX(total) value FROM (
           SELECT SUM(MONTHs * salary) as total
           FROM Employee
           GROUP BY employee_id
      ) T
   ) D
   GROUP BY Employee.employee_id,D.value
   HAVING SUM(MONTHs * salary)  = D.value
您可以简单地使用:

select count(*)
from employee
where months * salary = (
  select max(months * salary)
  from employee
);
您可以简单地使用:

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

我删除了不兼容的数据库标记。可以为您正在使用的数据库添加标记。tanx@GordonLinoffI删除了不兼容的数据库标记。请随意为您正在使用的数据库添加标记。tanx@GordonLinofftanx用于您的建议,但由于某些限制,我无法使用临时表。此现有查询的问题是(我的子查询用于查找最高工资,而我的主查询希望与该最高工资进行比较,并查找与之匹配的工资计数。我不知道如何在使用alias的Having子句中进行比较name@Ramgopal“某些限制”?需要详细说明吗?@这不是技术性的,我正在准备一个编程竞赛,我不能创建临时表,只是我不能创建和删除it@Strawberry请您在having子句中解释如何将列与子查询别名进行比较。很抱歉,您在这里使用的是子查询,而不是临时表。另外,您确实在外部查询中不需要GROUP BY。Slaakso的答案是way cleaner.tanx,这是您的建议,但由于某些限制,我无法使用临时表。我现有的查询的问题是(我的子查询用于查找最高工资,而我的主查询希望与该最高工资进行比较,并查找与之匹配的工资计数。我不知道如何在使用alias的Having子句中进行比较name@Ramgopal“某些限制”?需要详细说明吗?@这不是技术性的,我正在准备一个编程竞赛,我不能创建临时表,只是我不能创建和删除it@Strawberry请您在having子句中解释如何将列与子查询别名进行比较。很抱歉,您在这里使用的是子查询,而不是临时表。另外,您确实在外部查询中不需要GROUP BY。Slaakso的答案更简洁。我希望我们不能在where条件中使用聚合函数在子查询中使用聚合函数是完全可以的。我希望我们不能在where条件中使用聚合函数在子查询中使用聚合函数是完全可以的