每日两SQL(10),欢迎交流~

限于喜欢 提交于 2019-12-25 23:02:05

题目描述

查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
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`));

部分数据展示

解答

【还没细想,此答案摘自大数据肌肉猿】

SELECT
  a.emp_no,
  (a.salary - b.salary) AS growth
FROM
  (
SELECT
      e.emp_no,
      s.salary
FROM
      employees e
LEFT JOIN salaries s ON e.emp_no = s.emp_no
WHERE
      s.to_date = '9999-01-01'
GROUP BY
      s.emp_no
  ) a,
  (
SELECT
      e.emp_no,
      s.salary
FROM
      employees e
LEFT JOIN salaries s ON e.emp_no = s.emp_no
WHERE
      s.to_date IN (
SELECT
min(to_date)
FROM
          salaries s
GROUP BY
          s.emp_no
      )
GROUP BY
      s.emp_no
  ) b
WHERE
  a.emp_no = b.emp_no
ORDER BY
  growth ASC;

题目描述

统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及次数sum

CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));

向department表插入数据

INSERT INTO departments VALUES('d001','Marketing'); INSERT INTO departments VALUES('d002','Finance'); INSERT INTO departments VALUES('d003','Human Resources'); INSERT INTO departments VALUES('d004','Production'); INSERT INTO departments VALUES('d005','Development'); INSERT INTO departments VALUES('d006','Quality Management'); 

解答

SELECT
  a.dept_no,
  a.dept_name,
count(*) AS sum
FROM
  (
SELECT
      d.dept_no,
      de.emp_no,
      d.dept_name
FROM
      dept_emp de
LEFT JOIN departments d ON de.dept_no = d.dept_no
  ) a
INNER JOIN salaries s ON a.emp_no = s.emp_no
GROUP BY
  a.dept_no;

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!