我在查询中加入了几个表:人力资源员工、人力资源部门、人力资源地点、人力资源国家/地区:人力资源人员:
| 姓名|薪金|department_id(指向人力资源部门)|
| - -----|- -----|- -----|
| ......这是什么?|......这是什么?|......这是什么?|
| ......这是什么?|......这是什么?|......这是什么?|
人力资源部门
| 部门ID| location_id(指向人力资源位置)|
| - -----|- -----|
| ......这是什么?|......这是什么?|
| ......这是什么?|......这是什么?|
人力资源地点
| 位置标识|country_id(指向人力资源国家)|
| - -----|- -----|
| ......这是什么?|......这是什么?|
| ......这是什么?|......这是什么?|
人力资源国家
| 国家ID|国家名称|
| - -----|- -----|
| ......这是什么?|......这是什么?|
| ......这是什么?|......这是什么?|
对于我的查询,我必须显示每个员工的工资高于或等于一个国家的平均工资
代码如下所示,并给出了正确的结果:
SELECT
e.first_name || ' ' || e.last_name AS name,
TRIM(CAST(con.country_name AS CHAR(25))) AS country,
e.salary AS salary,
(SELECT ROUND(AVG(e1.salary)) FROM hr.employees e1
JOIN hr.departments dep1 ON e1.department_id = dep1.department_id
JOIN hr.locations loc1 ON dep1.location_id = loc1.location_id
WHERE country_id = loc.country_id
)AS avg_sal_country
FROM hr.employees e
JOIN hr.departments dep ON e.department_id = dep.department_id
JOIN hr.locations loc ON dep.location_id = loc.location_id
JOIN HR.countries con ON loc.country_id = con.country_id
WHERE (salary >= (SELECT AVG(e1.salary) FROM hr.employees e1
JOIN hr.departments dep1 ON e1.department_id = dep1.department_id
JOIN hr.locations loc1 ON dep1.location_id = loc1.location_id
WHERE country_id = loc.country_id) )
;
根据评分系统我的教授使用的成本我的声明是27而成本的查询从教授是16,我如何重写这是更有效的?
编辑:我的结果是这样的
| 姓名|国家|薪金|平均销售国|
| - -----|- -----|- -----|- -----|
| 鲍勃|美国|四千|三千八百|
| 苏西|英国|三千|二千年|
| 汤姆|美国|五千|三千八百|
1条答案
按热度按时间ijxebb2r1#
我推荐窗口函数(也就是Oracle中的分析函数),它可以有效地替换代码中的子查询: