表一:
dept-----job------salary
01......nurse .....1000
02......driver.....2000
02......doctor.....5000
01.......pilot.....2000
表二:
dept------location
01..........Japan
02..........New York
我正在尝试按位置获取每个工作的平均工资。
这是我想出的(显然不正确)
SELECT two.location, one.job, AVG(one.sal)
FROM one, two
WHERE one.dept = two.dept
GROUPED BY two.loc, one.job;
有什么主意我做错了吗? (糟糕的表格格式的道歉)
答案 0 :(得分:0)
请尝试此查询。
SELECT
B.location, A.job, AVG(A.salary)
FROM
one AS A
LEFT JOIN two AS B
ON A.dept = B.dept
GROUP By B.location, A.job
答案 1 :(得分:0)
尝试使用ANSI JOIN语法。
SELECT two.location, one.job, AVG(one.salary)
FROM one
JOIN two
WHERE one.dept = two.dept
GROUP BY two.location, one.job;
答案 2 :(得分:0)
您似乎已经很接近所要查找的结果。
GROUPED BY
,而是GROUP BY
。不要重新发明语法,请使用手册two.location
,则无法按two.loc
分组并期望它能正常工作FROM
子句中使用逗号分隔的表格。联接表显式,将条件(您可能正在使用)放入WHERE
子句中。它有助于提高代码的可读性,更易于维护,使您可以将一个表与另一个表进行外部联接(如有必要)。使用您使用的语法,这是不可能做到的。以下是您可能正在执行的示例。 CTE(WITH保理子句)仅显示您的数据; 有用的代码从第13行开始。
SQL> with
2 one (dept, job, salary) as
3 (select '01', 'nurse' , 1000 from dual union all
4 select '02', 'driver', 2000 from dual union all
5 select '02', 'doctor', 5000 from dual union all
6 select '01', 'pilot' , 2000 from dual
7 ),
8 two (dept, location) as
9 (select '01', 'Japan' from dual union all
10 select '02', 'New York' from dual
11 )
12 -- This is what you need
13 select t.location,
14 o.job,
15 avg(o.salary) avg_salary
16 from one o join two t on t.dept = o.dept
17 group by t.location,
18 o.job
19 order by t.location,
20 o.job;
LOCATION JOB AVG_SALARY
-------- ------ ----------
Japan nurse 1000
Japan pilot 2000
New York doctor 5000
New York driver 2000
SQL>
在用oracle-apex
标签标记问题时,建议您将查询放入互动报告中,例如
select t.location,
o.job,
o.salary
from one o join two t on t.dept = o.dept
order by t.location,
o.job
,然后检查其 Actions (操作)按钮,该按钮可让您执行许多不同的设置,包括排序,计算平均值/汇总/等,高亮显示,...进行操作,希望您会觉得有趣。这样做的好处是,用户可以创建自己的报告并将其保存以备后用。您将只提供基本的查询和布局,而每个查询和布局都可以自由修改(不影响主报表;请放心,它们不会破坏任何内容)。