在显示组中具有最高薪水的用户名时,使用group by无效

时间:2015-02-16 12:51:28

标签: mysql

我使用 MySQL

我想显示一些记录,例如每个指定的总薪资,平均薪水等等。所有工作除了:我想在团体中显示最高薪水的人名。当我使用下面的查询时,我会给出错误:Invalid use of group function。我运行了很多次使用不同的调整,查询的顺序,仍然给出错误。这可能是什么问题?

SELECT designation , SUM(salary) as salary_as_per_designation ,
        count(*) as num_employees ,
        avg(salary) as avg_salary , 
        MIN(salary) as min_salary_of_emp_per_designation, 
        MAX(salary) as max_salary_of_emp_per_designation , 
        (SELECT name FROM articles where salary = max(salary) GROUP BY designation LIMIT  1) as emp_name_min_sal 
FROM articles GROUP BY designation;

当我使用上面的第二行(如.... where salary = 10000... 100)时,我们使用的是因为某些随机值查询有效但给出了错误的结果,我的意思是对于组中薪水最高的用户来说名字错误。

我的表格结构如下:

CREATE TABLE IF NOT EXISTS `articles` (
`id` int(12) NOT NULL,
  `name` varchar(256) NOT NULL,
  `salary` double NOT NULL,
  `designation` enum('tech_support','developer','tester','designer') NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

感谢。

3 个答案:

答案 0 :(得分:1)

这有用吗?注意子选择条件,您是否在指定分组中查找工资?

SELECT designation,
       SUM(salary) as salary_as_per_designation,
       count(*) as num_employees,
       avg(salary) as avg_salary, 
       MIN(salary) as min_salary_of_emp_per_designation, 
       MAX(salary) as max_salary_of_emp_per_designation, 
       (SELECT max(name)
        FROM articles
        where designation = a1.designation 
        and salary = (select max(salary) from articles
                      where designation = a1.designation)) as emp_name_min_sal 
FROM articles a1
GROUP BY designation;

答案 1 :(得分:1)

SELECT ilv.*,
   (SELECT GROUP_CONCAT(name) 
    FROM articles 
    where salary = ilv.max_salary_of_emp_per_designation 
   ) as emp_name_min_sal 
FROM 
(
SELECT designation , SUM(salary) as salary_as_per_designation ,
    count(*) as num_employees ,
    avg(salary) as avg_salary , 
    MIN(salary) as min_salary_of_emp_per_designation, 
    MAX(salary) as max_salary_of_emp_per_designation 
FROM articles 
GROUP BY designation
) AS ilv

答案 2 :(得分:-1)

请改用此查询,

SELECT MAX(salary) into @max_sal FROM articles;
SELECT designation , SUM(salary) as salary_as_per_designation ,
        count(*) as num_employees ,
        avg(salary) as avg_salary , 
        MIN(salary) as min_salary_of_emp_per_designation, 
        MAX(salary) as max_salary_of_emp_per_designation , 
        (SELECT name FROM articles where salary = @max_sal GROUP BY designation LIMIT  1) as emp_name_min_sal 
FROM articles GROUP BY designation;

希望这会有效,谢谢。