如何合并聚集,加入和分组?

时间:2019-04-16 04:07:04

标签: sql oracle

表一:

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;  

有什么主意我做错了吗? (糟糕的表格格式的道歉)

3 个答案:

答案 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 (操作)按钮,该按钮可让您执行许多不同的设置,包括排序,计算平均值/汇总/等,高亮显示,...进行操作,希望您会觉得有趣。这样做的好处是,用户可以创建自己的报告并将其保存以备后用。您将只提供基本的查询和布局,而每个查询和布局都可以自由修改(不影响主报表;请放心,它们不会破坏任何内容)。