求解一道sql题目,感激不尽!

kakkoii_moe 2021-06-02 22:36:39

题目:查找排除最大、最小salary之后的当前(to_date = '9999-01-01' )员工的平均工资avg_salary。
CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,

PRIMARY KEY (`emp_no`,`from_date`)); 

如: 

INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43699,'2000-12-01','2001-12-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');
INSERT INTO salaries VALUES(10004,70698,'2000-11-27','2001-11-27');
INSERT INTO salaries VALUES(10004,74057,'2001-11-27','9999-01-01');

 

以下是我的答案,系统报错 SQL_ERROR_INFO: 'Invalid use of group function'

select avg(T1.salary)
from (select salary,to_date
     from salaries 
     where salary between max(salary) and min(salary)) as T1
where to_date = '9999-01-01'

 

...全文
787 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
布谷歌 2021-06-15
  • 打赏
  • 举报
回复

如下:

SELECT AVG(salary)
FROM salaries a JOIN (SELECT to_date, MAX(salary) AS mx,MIN(salary) AS mi FROM salaries WHERE to_date='9999-01-01') b
ON a.`to_date`=b.to_date AND a.`salary`>mi AND a.`salary`<mx

 

无远开发平台 2021-06-05
  • 打赏
  • 举报
回复

很奇怪你写的SQL中并没有group,为啥报这个错误?你的字段名 to_date  是不是跟sql保留函数 to_date 冲突了 导致解析报错?换个名字比如 叫 end_date start_date 试试?

另外,为啥不直接用无远开发平台直接开发?

往事随风_h 2021-06-04
  • 打赏
  • 举报
回复 1

自己的作业自己做

explain
select avg(t.salary2) from
(select case when salary = (select max(salary) from salaries where to_date = '9999-01-01') then 0
when salary = (select min(salary) from salaries where to_date = '9999-01-01') then 0 else salary
end as salary2
from salaries a
where to_date = '9999-01-01') t

finghting

select avg(salary) from salaries
where to_date = '9999-01-01'
and salary != (select max(salary) from salaries where to_date = '9999-01-01')
and salary != (select min(salary) from salaries where to_date = '9999-01-01')

换个支持的

Sparrow-W 2021-06-03
  • 打赏
  • 举报
回复 2

where子句中是不能使用max、min之类的聚集函数作为条件表达式的。聚集函数只能用于select子句和group by中的having子句。这里需要用having子句来写

7,340

社区成员

发帖
与我相关
我的任务
社区描述
因为缘分,所以猿粉! 这里有“入门级选手”必备的成长路线图,为“程序员后备队”提供技术大咖直播指导,丰富的学习资料已经等候多时,请查收! 陪伴猿粉共同成长,提升技术不在话下;右边扫码关注微信公众号。
其他 其他
社区管理员
  • 高校俱乐部
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

       2021年“C站百所高校巡讲” “C站名企参观”等活动,火热报名中, 与CSDN创始人蒋涛、各路技术大咖面对面!

       现招募CSDN高校俱乐部的部长并组建本校CSDN高校俱乐部,我们希望你是高校在校生且是IT技术爱好者,校内社交圈,有强烈的责任心,熟悉社团工作,有校园活动组织经验,在高校能够建立长足发展的学习型俱乐部,我们期待您的加入,CSDN高校俱乐部将赋予以下权益:

  • 高校巡讲:骨灰级专家线下巡讲
  • 线上直播:技术大咖线上分享
  • 线下沙龙:学习精英线下沙龙讨论
  • 学习小组:任务驱动,免费学习
  • 能力认证:对标大厂,高薪就业
  • 技术竞赛:竞赛选拔,实战演练
  • 企业游学:到大厂参观并学习
  • 企业招聘:面向俱乐部成员专属招聘
  • 专属博客:给各俱乐部搭建社区云
  • 电子书卡:给俱乐部成员提供学习资源
  • 组织logo:设计旗帜,活动宣传

 联系方式:

  • 电话:张老师-17734567851(同微)
  • 邮箱:student@csdn.net
  • Q Q:1218227747

试试用AI创作助手写篇文章吧