MySQL 练习(员工数据库)
SQL 查询练习
员工数据库
- 查询每个部门的经理信息。输出格式为(部门名,经理姓,经理名),按部门名升序输出
1 | select D.dept_name, E.last_name, E.first_name |
- 找出那些至少拥有三个title并且至少在两个部门工作过的员工,要求按升序输出前十个员工号
- count 的时候需要去重
1 | select E.emp_no |
- 找出比其部门经理工资高的员工,要求输出列是(员工号,经理员工号),按员工号升序,员工号相同的按经理员工号升序,列出前十个。注意:有些员工会在多个部门任职,部门经理也会轮换,所以两者在同一部门工作的日期必须有交集。而任期内工资也可能是变化的,所以还必须考虑工资日期的交集。
1 | select distinct DE.emp_no, DM.emp_no |
- 将每个部门的员工的姓串接在一列中,要求以逗号分隔,按姓升序排序,仅包括前5个员工。输出格式为(部门号,员工姓),按部门号升序输出。
1 | select DE.dept_no, substring_index( |
- 列出每个部门中的最高和最低工资的员工及其工资。输出格式为(部门号,最高工资员工号,最高工资,最低工资员工号,最低工资)。注意:员工某一时期的工资,日期范围要和在该部门任职日期范围有交集,才能算作该部门的工资
- 先找出最高工资,再找到人
1 | /* 超时了 */ |
- 最大最小同时求,这样就不会超时
1 | with TMP as ( |
- 查询最高工资所在的部门中的最低工资是多少?输出格式为(部门号,最高工资,最低工资),按部门号升序输出。
1 | with TMP as ( |
- 选做。比较男女职工的平均工资差异。一个人的生涯平均工资这样计算:先将某段时间内的年薪换算成日薪(统一用一年360天),再乘以在这个年薪水平下所工作的天数,得到收入,将所有不同时段的收入加起来,再除以总天数,这样就得到总平均日薪了,求所有男女员工的平均日薪也是类似做法。输出格式为(男职工平均日薪,女职工平均日薪,平均日薪差)。注意:to_date是'9999-01-01'的统一用最大的from_date+一年 代替,即'2003-08-01'
1 | /* TODO */ |
- 11027号员工有过三个不同的title, 将其按如下表格形式输出
emp_no | tenure1 | tenure2 | tenure3 |
---|---|---|---|
11027 | 1986-05-07~1991-05-07Engineer | ... | ... |
1 | /* MySQL 字符串拼接不能直接用 +, 需要使用 concat(,) */ |