在my database中,我有一个表工资,用于存储员工过去或当前的所有工资,以及存储员工的工作人员。
我正在尝试选择所有获得晋升的员工:
select first_name, last_name
from salaries
join employees on employees.emp_no = salaries.emp_no
where salaries.from_date > employees.hire_date
and salary >
(select salary from salaries
where salaries.emp_no = employees.emp_no and from_date = employees.hire_date)
group by salaries.emp_no
limit 10 ;
它返回:
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Georgi | Facello |
| Chirstian | Koblick |
| Kyoichi | Maliniak |
| Tzvetan | Zielinski |
| Sumant | Peac |
| Mary | Sluis |
| Patricio | Bridgland |
| Eberhardt | Terkki |
| Cristinel | Bouloucos |
| Kazuhide | Peha |
+------------+-----------+
10 rows in set (10.05 sec)
现在我试图同时选择他们被雇用时的工资(因为它已经在嵌套选择中被选中)。
有没有办法从select salary from salaries where salaries.emp_no = employees.emp_no and from_date = employees.hire_date
获取此数据?
我尝试过像......
select first_name, last_name, first_salary.salary
from salaries join employees on employees.emp_no = salaries.emp_no
where salaries.from_date > employees.hire_date and salary >
(select salary from salaries where salaries.emp_no = employees.emp_no and from_date = employees.hire_date)
AS FIRST_SALARY
group by salaries.emp_no
limit 10 ;
......但是它很明确无效
(否则我们可能会执行UNION,因为查询已经非常长)。
答案 0 :(得分:0)
一种方法是在工资上使用MAX和MIN:
SELECT employees.emp_no, first_name, last_name, MAX(salary), MIN(salary)
FROM salaries
INNER JOIN employees ON employees.emp_no = salaries.emp_no
GROUP BY employees.emp_no, first_name, last_name
HAVING MAX(salary) > MIN(salary)
编辑:如果你想确保最高工资实际上是在雇用日期之后的日期,你可以这样做:
SELECT first_name, last_name
FROM
(SELECT employees.emp_no, first_name, last_name, MAX(salary) AS mxsal
FROM employees
INNER JOIN salaries
ON employees.emp_no = salaries.emp_no
GROUP BY employees.emp_no, first_name, last_name) highest
INNER JOIN
(SELECT employees.emp_no, salary
FROM employees
INNER JOIN salaries on employees.emp_no = salaries.emp_no
WHERE employees.hire_date = salaries.from_date) starting
ON highest.emp_no = starting.emp_no
WHERE highest.mxsal > starting.salary
首先,我创建了一个“最高”的表,每个员工的最高工资(mxsal)。然后我加入了一个“起始”表,其中包含每个员工的起薪(starting.salary)。然后只选择最高工资大于起始工资的记录。
答案 1 :(得分:0)
重新构建您的查询并在select中添加新列以选择员工的初始薪水
select first_name,
last_name ,
(select top 1 salary
from salaries where salaries.emp_no = employees.emp_no
and from_date = employees.hire_date) AS InitialSalary
from salaries
join employees on employees.emp_no = salaries.emp_no
AND salaries.from_date > employees.hire_date
AND salary > (select salary
from salaries
where salaries.emp_no = employees.emp_no
and from_date = employees.hire_date)
group by salaries.emp_no
limit 10 ;