我在做一个练习,我要找出哪个员工在公司工作期间工资增长幅度最大。这是我需要用的两张table。
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;
这个查询能确保我得到正确的结果吗?有没有更快的方法?
编辑:添加分组依据
1条答案
按热度按时间gg58donl1#
这太长了,不能发表评论。
“加薪幅度最大”模棱两可。你发现了最高和最低工资之间最大的差别。这是对这个问题的一个非常合理的解释,但还有其他解释。
例如,有人可能从高薪开始,然后被降职,所以他们的最高工资是第一位的。这就提出了另一种合理的解释:最近一次工资与第一次工资之差的绝对值。在mysql中计算起来有点困难。
另一种解释是增长幅度最大。因此,从5万美元增加到6万美元将被认为比从50万美元增加到55万美元“更大”,因为比例更大。当然,这可以应用于最大/最小或最新/第一。
类似的问题也可以有一个答案,关于工资每年的增长。
所以,这个问题是模棱两可的,但是您有一个完全合理的解释,并且您的查询实现了这一点。我不会给专栏打电话
max
,因为它被称为diff
.