首页 > 试题广场 >

有一张工资表salaries,示例数据如下: 现要找出,除开

[单选题]
有一张工资表salaries,示例数据如下:

现要找出,除开在职员工(指to_date = '9999-01-01')的最大、最小工资(可能存在并列最大或最小)后,其他员工的平均工资avg_salary,示例数据查询后输出:

正确的MySQL查询语句是:


  • SELECT AVG(salary) AS avg_salary FROM salaries WHERE to_date = '9999-01-01' AND salary NOT IN (SELECT MAX(salary) FROM salaries) AND salary NOT IN (SELECT MIN(salary) FROM salaries);

  • SELECT AVG(salary) AS avg_salary FROM salaries WHERE salary > MIN(salary) AND salary < MAX(salary) AND to_date = '9999-01-01';

  • SELECT ((SUM(salary) - MAX(salary) - MIN(salary)) / (COUNT(1)-2)) avg_salary FROM salaries WHERE to_date = '9999-01-01';

  • SELECT AVG(salary) AS avg_salary FROM salaries WHERE salary NOT IN (SELECT MAX(salary) FROM salaries WHERE to_date = '9999-01-01') AND salary NOT IN (SELECT MIN(salary) FROM salaries WHERE to_date = '9999-01-01') AND to_date = '9999-01-01';

这题目很有歧义。
现要找出,除开在职员工(指to_date = '9999-01-01')的最大、最小工资(可能存在并列最大或最小)后,其他员工的平均工资avg_salary。
我的理解是:将所有员工的工资去掉在职员工的最大值和最小值,其余的再求和,并不是其余的在职员工再求和。如果要特指在职员工的话,那就是说明 其他在职员工的平均工资
发表于 2021-12-21 15:05:28 回复(14)
-- 现在找出, 除了在职员工  求离职员工 去除最高和最低工资求其它员工的平均工资
SELECT
	AVG( salary ) AS avg_salary 
FROM
	salaries 
WHERE
	salary NOT IN ( SELECT MAX( salary ) FROM salaries WHERE to_date = '9999-01-01' ) 
	AND salary NOT IN ( SELECT MIN( salary ) FROM salaries WHERE to_date = '9999-01-01' ) 
	AND to_date = '9999-01-01';
-- 思路
-- 查询平均工资使用AVG函数 as 起别名 叫avg_salary  使用where判断条件 工资最大条件符合的不出现 和 工资最小的符合条件的不出现 和 符合 to_date = '9999-01-01

发表于 2022-05-06 19:51:54 回复(0)
题目应改为:除开在职员工(指to_date = '9999-01-01')的最大、最小工资(可能存在并列最大或最小)后,其他在职员工的平均工资avg_salary
发表于 2022-09-07 23:37:05 回复(1)
最高薪和最底薪的员工都是在职的,所以其实A在这个数据上也是正确的
发表于 2022-01-06 15:09:12 回复(1)
为啥除外,反而还一直把这个加进去
发表于 2022-07-21 21:11:26 回复(0)
请问这个C选项为什么不对呢。
发表于 2021-12-21 10:46:06 回复(2)
这题目不够严谨,其他员工是包含了在职员工的,所以按答案来看,因说明是其他在职员工的平均工资
编辑于 2023-12-18 22:58:25 回复(0)
a和d有什么区别吗?
发表于 2023-11-19 18:53:46 回复(0)
这个怎么能算出来73292的,我自己算了几个逻辑都没有那么高,而且emp_no重复用确定不是续约了吗,怎么就不算一个人呢
发表于 2023-11-04 18:52:56 回复(0)
牛客的题我是越来越读不明白了

发表于 2023-08-15 17:34:57 回复(0)
select (sum(salary) / count(emp_no)) as avg_salary from salaries
    where to_date = '9999-01-01' and salary not in
                                   ((select min(salary) as min from salaries where to_date = '9999-01-01')
                                    union
                                    (select max(salary) as max from salaries where to_date = '9999-01-01'))

发表于 2023-07-07 23:18:34 回复(0)
讲得贼绕
发表于 2022-11-07 17:03:33 回复(0)
为啥要用not in呢,最大筛选>最小,<最大不行吗?
发表于 2022-03-23 17:15:42 回复(1)
顶顶顶
发表于 2022-03-06 18:51:37 回复(0)
B 选项提交会报错: Invalid use of group function
发表于 2022-03-01 11:03:50 回复(0)
B为啥不对啊
发表于 2022-01-24 10:43:40 回复(2)
这什么题啊,除开?咋除的
发表于 2022-01-08 22:12:58 回复(0)