我正在做一个练习,我必须找到哪个员工在公司工作期间薪水涨幅最大。这是我需要使用的两个表。
CREATE TABLE employees (
emp_no INT NOT NULL,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender ENUM ('M','F') NOT NULL,
hire_date DATE NOT NULL,
PRIMARY KEY (emp_no));
CREATE TABLE salaries (
emp_no INT NOT NULL,
salary INT NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
# FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,
PRIMARY KEY (emp_no, from_date));
我使用" MySQL8.0命令行客户端 - Unicode"执行下面显示的查询:
SELECT first_name, last_name, MAX(salary)-MIN(salary) AS 'Max'
FROM employees JOIN salaries using(emp_no)
GROUP BY emp_no
ORDER BY Max DESC
LIMIT 1;
此查询是否确保我获得了正确的结果?有更快的方法吗?
编辑:添加GROUP BY
答案 0 :(得分:1)
评论太长了。
"薪水增幅最大"很暧昧。您发现最高和最低工资之间的最大差异。这是对这个问题的非常合理的解释,但还有其他的解释。
例如,有人可能从高薪开始然后被降职,所以他们的最高工资是第一个。这表明了另一种合理的解释:最近薪水与第一份薪水之间差额的绝对值。在MySQL中计算起来有点棘手。
另一种解释是最大的百分比增加。因此,将从50,000美元增加到60,000美元,并考虑更大的"从500,000美元到550,000美元,因为百分比更大。当然,这可以应用于最大/最小或最新/第一。
类似的问题也可以得到关于薪水中每年增加的答案。
所以,这个问题很模糊,但你有一个非常合理的解释,你的查询实现了这一点。我不会调用列max
,因为它更恰当地称为diff
。