Sql &引用;“线融合”;在甲骨文中

Sql &引用;“线融合”;在甲骨文中,sql,oracle,group-by,grouping,analytic-functions,Sql,Oracle,Group By,Grouping,Analytic Functions,我试图在Oracle中进行“行融合”,也就是说,我希望有一个返回行的查询,这些行中的每一行对于每一列都有最初存储在其他行中的值 例如(我遵循),假设我有一个EMPEMP员工表,存储员工编号、部门编号和工资 如何创建一个查询,该查询返回的行数与部门数相同,并且返回该部门的最高工资 我想要这样的东西: EMPNO DEPTNO SAL MAX_VAL_IN_DEPT ---------- ---------- ---------- ----------------- 79

我试图在Oracle中进行“行融合”,也就是说,我希望有一个返回行的查询,这些行中的每一行对于每一列都有最初存储在其他行中的值

例如(我遵循),假设我有一个EMP
EMP
员工表,存储员工编号、部门编号和工资

如何创建一个查询,该查询返回的行数与部门数相同,并且返回该部门的最高工资

我想要这样的东西:

 EMPNO     DEPTNO        SAL MAX_VAL_IN_DEPT
---------- ---------- ---------- -----------------
  7934         10       1300              1300
  7369         20        800               800
  7900         30        950               950
SELECT e.empno
     , e.deptno
     , e.sal
     , e2.maxsal AS MAX_VAL_IN_DEPT
FROM   emp e
INNER JOIN (select t.deptno, max(sal) as maxsal from emp t group by t.deptno) e2 on e.deptno = e2.deptno;
:

是我能找到的最接近的,但是我需要一个额外的
GROUP BY
deptno子句,我不能添加它。

这样做:

 EMPNO     DEPTNO        SAL MAX_VAL_IN_DEPT
---------- ---------- ---------- -----------------
  7934         10       1300              1300
  7369         20        800               800
  7900         30        950               950
SELECT e.empno
     , e.deptno
     , e.sal
     , e2.maxsal AS MAX_VAL_IN_DEPT
FROM   emp e
INNER JOIN (select t.deptno, max(sal) as maxsal from emp t group by t.deptno) e2 on e.deptno = e2.deptno;
这样做:

 EMPNO     DEPTNO        SAL MAX_VAL_IN_DEPT
---------- ---------- ---------- -----------------
  7934         10       1300              1300
  7369         20        800               800
  7900         30        950               950
SELECT e.empno
     , e.deptno
     , e.sal
     , e2.maxsal AS MAX_VAL_IN_DEPT
FROM   emp e
INNER JOIN (select t.deptno, max(sal) as maxsal from emp t group by t.deptno) e2 on e.deptno = e2.deptno;
可能类似(未经测试):

可能类似(未经测试):


这将比具有单独子选择的版本更快

您的语句很接近,只需使用
max()


不过,我不确定你的“尽可能多的部门”声明。您的示例输出清楚地显示每个员工的一个“行”,而不是部门。

这将比使用单独的子选择的版本更快

您的语句很接近,只需使用
max()

不过,我不确定你的“尽可能多的部门”声明。您的示例输出清楚地显示了每个员工的一个“行”,而不是部门