JOIN - 2个任务--sql developer

时间:2017-12-05 19:40:04

标签: sql oracle

我有两项任务:

1。第一任务

显示first_name,last_name(来自员工),job_title,employee_id(来自作业)start_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"。" EMPLOYEE_ID":无效的标识符
  2. 在s.employee_id = hp.employee_id"上的含义是什么?#34;也许我应该写别人而不是这个。
  3. 2。第二任务

    显示department_name(来自部门),每个部门的平均和最高工资(这些数据来自员工)以及在这些部门(来自员工)中工作的员工数量。仅选择人数超过1人的部门。结果舍入到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
    

1 个答案:

答案 0 :(得分:0)

我通过改进表别名来修改您的查询。希望如果你说的那样,如果表中存在正确的列,它应该可以工作:

test-gateway     staging             b215d109c627        8 days ago           1.977 GB
test-gateway     4.26.2-1.5.2-298    7376dd26db6e        2 weeks ago          2.117 GB
test-gateway     4.26.0-1.5.2-296    e6a772c0e230        2 weeks ago          2.048 GB
test-gateway     prod                d3743f5246f4        3 weeks ago          1.978 GB
test-gateway     4.24.1-1.5.2-293    90639b86573a        5 weeks ago          1.908 GB
test-gateway     4.24.0-1.5.2-291    5646792848cf        6 weeks ago          1.873 GB
test-gateway     4.24.0-1.5.2-289    475e72c8691e        6 weeks ago          1.847 GB
test-gateway     4.23.8-1.5.2-287    5e77c056c703        7 weeks ago          1.812 GB
test-gateway     4.23.6-1.5.2-282    f40fe68c0183        8 weeks ago          1.997 GB

当我们说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_idemployee_id = 1234中都存在employees,那么SQL将带来所有与jobs对应的同一行中的两个表中的列。您现在可以在employee_id = 1234子句中选择不同的列,就好像它们位于同一/单个表中一样(在加入之前不是这种情况)。这是SQL连接背后的主要逻辑。

关于您的第二项任务,请尝试以下查询。我通过引入SELECT对聚合进行了一些修改。如果出于某种原因同时存在两次COUNT(DISTINCT s.employees_id),您仍然希望将其视为一个人。

employees_id

如果还有任何问题,请告诉我。希望这有效。