西电数据库openGauss平台练习
西电数据库openGauss平台练习仅纪录平台标注中等难度及以上的题目
试卷编号:41
试卷名称:gongsi
条件:
公司数据库有如下关系模式: 员工employee(员工号eno,员工姓名ename,员工年岁eage,所在部门号dno,工资salary,工作日期work); 部门depart(部门号dno,部门名称dname,部门经理员工号dman)。
题目3:查询每个部门的部门号、员工均匀工资。
select dno, AVG(salary)
from employee group by dno
题目4:查询员工的中位数工资。
select distinct salary from employee a
where (select count(*) from employee b where b.salary>=a.salary) -
(select count(*) from employee b where b.salary<=a.salary)
between -1 and 1
这道题比较容易踩坑的地方是题目没有说明它对中位数的界说,这里是将多个中位数返回归去,而不用求均匀,而网上大多数类似的需求都是只能返回一个中位数,所以有多个中位数是都进行了求均匀操作,但这里是没有的,所以需要特别注意
题目5:查询每个部门的部门号,员工中位数工资。
select distinct dno,salary from employee a
where (select count(*) from employee b where b.dno=a.dno and b.salary>=a.salary) -
(select count(*) from employee b where b.dno=a.dno and b.salary<=a.salary)
between -1 and 1
题目6:员工表设计不符合1NF
工作日期包罗多个日期,中间用逗号,分隔,前后大概有多个空格,如2022-11-11,2022-11-12,2018-08-01,查询每个员工的员工号,姓名和工作日期,此中工作日期要求将原有日期拆分为单个日期。
select eno,ename,trim(regexp_split_to_table(work,',')) as work from employee;
这道题个人觉得是这套练习里最难的一道了,但openGauss的regexp_split_to_table函数已经帮我们实现了行转列这个最难的点,然后trim函数去一下空格,就出来了.当然别的方法也可以做,网上一搜都有,但函数用起来就是爽
页:
[1]