每组的KDB顶行
我想从部门表SQL中查询前5名工资收入者每组的KDB顶行,kdb,Kdb,我想从部门表SQL中查询前5名工资收入者 SELECT * FROM ( SELECT empno, salary, RANK () OVER (PARTITION BY deptno ORDER BY salary DESC) emprank FROM emp ) WHERE emprank <= 3; 但无法产生预期的结果。请给我一个提示。t在哪里: t:([]deptno:where 10 20 8;salary:40000
SELECT * FROM (
SELECT empno, salary, RANK () OVER (PARTITION BY deptno ORDER BY salary DESC) emprank FROM emp )
WHERE emprank <= 3;
但无法产生预期的结果。请给我一个提示。t在哪里:
t:([]deptno:where 10 20 8;salary:40000+38?30000;emp:neg[38]?`3)
您可以按部门返回收入最高的前三名,并提供以下信息
q)select from t where 3>(iasc idesc@;salary)fby deptno
deptno salary emp
-----------------
0 69894 mfm
0 55539 bbb
0 62673 jnd
1 66668 afk
1 67474 kcj
1 69979 kon
2 60561 oco
2 57664 khd
2 58743 dga
请注意,我使用表t纯粹作为示例表。如果您使用的桌子与我这里的桌子有显著差异,请告诉我 其中t是:
t:([]deptno:where 10 20 8;salary:40000+38?30000;emp:neg[38]?`3)
您可以按部门返回收入最高的前三名,并提供以下信息
q)select from t where 3>(iasc idesc@;salary)fby deptno
deptno salary emp
-----------------
0 69894 mfm
0 55539 bbb
0 62673 jnd
1 66668 afk
1 67474 kcj
1 69979 kon
2 60561 oco
2 57664 khd
2 58743 dga
请注意,我使用表t纯粹作为示例表。如果您使用的桌子与我这里的桌子有显著差异,请告诉我 其他执行速度更快、占用内存更少的替代方案:
q) select from t where ({til[count x] in 3#idesc x};salary) fby deptno
如果你想让所有的员工都在前三名工资范围内,你可以使用下面的解决方案
q) select from t where ({x in x 3#idesc x};salary) fby deptno
如果deptno未对表进行排序,则可以使用“xasc/xdesc”对结果进行排序:
q) `deptno xasc select from t where ({til[count x] in 3#idesc x};salary) fby deptno
其他执行速度更快、占用内存更少的替代方案:
q) select from t where ({til[count x] in 3#idesc x};salary) fby deptno
如果你想让所有的员工都在前三名工资范围内,你可以使用下面的解决方案
q) select from t where ({x in x 3#idesc x};salary) fby deptno
如果deptno未对表进行排序,则可以使用“xasc/xdesc”对结果进行排序:
q) `deptno xasc select from t where ({til[count x] in 3#idesc x};salary) fby deptno
另一种选择是:
select 3 sublist salary idesc[salary] by deptno from emp
如果一个部门的工资少于3份,则使用子列表而不是处理该案例。另一个选项是:
select 3 sublist salary idesc[salary] by deptno from emp
如果某个部门的工资少于3份,则使用子列表而不是处理该情况。如果存在关系,您希望如何处理边缘条件?如果存在关系,您希望如何处理边缘条件?