我有两项任务:
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
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
答案 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_id
和employee_id = 1234
中都存在employees
,那么SQL将带来所有与jobs
对应的同一行中的两个表中的列。您现在可以在employee_id = 1234
子句中选择不同的列,就好像它们位于同一/单个表中一样(在加入之前不是这种情况)。这是SQL连接背后的主要逻辑。
关于您的第二项任务,请尝试以下查询。我通过引入SELECT
对聚合进行了一些修改。如果出于某种原因同时存在两次COUNT(DISTINCT s.employees_id)
,您仍然希望将其视为一个人。
employees_id
如果还有任何问题,请告诉我。希望这有效。