加入-2个任务-SQL开发人员



我有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
  1. 我知道它不起作用。我正在收到:" hp"。" loblisee_id":无效的标识符
  2. 这是什么意思"在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时,这意味着,例如,如果表employeesjobs都存在一个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;

让我知道是否还有任何问题。希望这有效。

最新更新