我有2个任务:
1。第一个任务
show first_name,last_name(来自员工),job_title,employee_id(来自jobs)start_date,end_date,end_date(来自job_history)
我的想法:
SELECT s.employee_id
, first_name
, last_name
, job_title
, employee_id
, start_date
, end_date
FROM employees
INNER JOIN jobs hp
on s.employee_id = hp.employee_id
INNER JOIN job_history
on hp.jobs = h.jobs
- 我知道它不起作用。我正在收到:" hp"。" loblisee_id":无效的标识符
- 这是什么意思"在s.employee_id上= hp.employee_id"。也许我应该写STHG,而不是写STHG。
2。第二个任务
show dection_name(来自部门),每个部门的平均薪水和最高工资(这些数据来自员工)以及在这些部门(来自员工)的员工有多少员工。仅选择一人以上的部门。结果到2个小数位。
我有碎片,但我不知道要连接它我的想法:
SELECT department_name,average(salary),max(salary),count(employees_id)
FROM employees
INNER JOIN departments
on employees_id = departments_id
HAVING count(department) > 1
SELECT ROUND(average(salary),2) from employees
我通过改进表个性混叠来修改您的查询。希望,如果您说的是表格中的正确列,它应该有效:
SELECT s.employee_id, s.first_name, s.last_name,
hp.job_title, hp.employee_id,
h.start_date, h.end_date
FROM employees s
INNER JOIN jobs hp
on s.employee_id = hp.employee_id
INNER JOIN job_history h
on hp.jobs = h.jobs;
当我们说 on s.employee_id = hp.employee_id
时,这意味着,例如,如果表employees
和jobs
都存在一个employee_id = 1234
,则SQL将从同一行中的两个表中带来与employee_id = 1234
相对应的所有表。现在,您可以在SELECT
子句中选择不同的列,就好像它们在同一/单个表中(加入之前不是那样)。这是SQL加入背后的主要逻辑。
关于您的第二任务,请尝试以下查询。我通过引入COUNT(DISTINCT s.employees_id)
进行了一些聚合进行了一些修改。如果出于某种原因两次出现相同的employees_id
,您仍然想将其视为一个人。
SELECT d.department_name, avg(s.salary), max(s.salary), count(distinct s.employees_id)
FROM employees s
INNER JOIN departments d
on e.employees_id = d.departments_id
GROUP BY d.department_name
HAVING COUNT(DISTINCT s.employees_id) > 1;
让我知道是否还有任何问题。希望这有效。