我使用 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 ;
感谢。
答案 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;
希望这会有效,谢谢。