Sql &引用;“线融合”;在甲骨文中
我试图在Oracle中进行“行融合”,也就是说,我希望有一个返回行的查询,这些行中的每一行对于每一列都有最初存储在其他行中的值 例如(我遵循),假设我有一个EMPSql &引用;“线融合”;在甲骨文中,sql,oracle,group-by,grouping,analytic-functions,Sql,Oracle,Group By,Grouping,Analytic Functions,我试图在Oracle中进行“行融合”,也就是说,我希望有一个返回行的查询,这些行中的每一行对于每一列都有最初存储在其他行中的值 例如(我遵循),假设我有一个EMPEMP员工表,存储员工编号、部门编号和工资 如何创建一个查询,该查询返回的行数与部门数相同,并且返回该部门的最高工资 我想要这样的东西: EMPNO DEPTNO SAL MAX_VAL_IN_DEPT ---------- ---------- ---------- ----------------- 79
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()
:
不过,我不确定你的“尽可能多的部门”声明。您的示例输出清楚地显示了每个员工的一个“行”,而不是部门