我无法产生这个问题的预期结果:
按字母顺序显示每位收入低于最佳工资雇员的员工的全名,工作,薪水,部门编号
输出行应该如下所示:
Jonathon Taylor SA_REP ==== $8,600 80
到目前为止我的查询:
select last_name || ', ' || first_name "full name", job_id, salary, department_id
from employees
where salary < ANY
(SELECT MAX(salary)
from employees e join departments d
where e.job_id <> 'AC_MGR' OR 'AD_VP' OR 'AD_PRES'
AND d.department_name <> 'SALES' OR 'MARKETING'
GROUP BY department_id)
如果有人可以帮助我并指出我如何获得正确输出的正确方向,那将非常感激。谢谢!
答案 0 :(得分:1)
SELECT substr(first_name || ' ' || last_name, 1, 25) as NAME
, job_id
, lpad( to_char(salary, '$999,999.99' ), 12, '=') as SALARY
FROM employees
WHERE salary <
(
SELECT MAX(salary)
FROM employees e INNER JOIN departments d
ON e.department_id = d.department_id
WHERE e.job_id NOT IN ('AC_MGR', 'AD_VP', 'AD_PRES') AND
d.department_name NOT IN ('SALES', 'MARKETING')
)
我修复了原始查询中的一些问题:
SELECT
中与您所需输出相匹配的连接JOIN
条件,因为您的原始查询正在执行CROSS JOIN
(您可能不想要)OR
WHERE
中的WHERE ... NOT IN
条件
GROUP BY
,因为它没有任何用途答案 1 :(得分:0)
这是人力资源架构,对吗?您需要inner join
员工和部门与department_id
匹配。您可以使用WITH
语法进行查询:
with temp as (
select last_name || ', ' || first_name as "Full name",
job_id, salary as slr, d.department_id
from employees e inner join departments d on e.department_id=d.department_id
where e.job_id NOT in ('AC_MGR','AD_VP','AD_PRES')
and d.department_name NOT in ('SALES', 'MARKETING')
)
select * from temp where slr <= (select max(slr) from temp);