发现MySQL的增幅最大

时间:2018-04-20 12:37:42

标签: mysql sql

我正在做一个练习,我必须找到哪个员工在公司工作期间薪水涨幅最大。这是我需要使用的两个表。

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

1 个答案:

答案 0 :(得分:1)

评论太长了。

"薪水增幅最大"很暧昧。您发现最高和最低工资之间的最大差异。这是对这个问题的非常合理的解释,但还有其他的解释。

例如,有人可能从高薪开始然后被降职,所以他们的最高工资是第一个。这表明了另一种合理的解释:最近薪水与第一份薪水之间差额的绝对值。在MySQL中计算起来有点棘手。

另一种解释是最大的百分比增加。因此,将从50,000美元增加到60,000美元,并考虑更大的"从500,000美元到550,000美元,因为百分比更大。当然,这可以应用于最大/最小或最新/第一。

类似的问题也可以得到关于薪水中每年增加的答案。

所以,这个问题很模糊,但你有一个非常合理的解释,你的查询实现了这一点。我不会调用列max,因为它更恰当地称为diff