SQL 分组依据,但如果值相同则允许重复
SQL Group by, but allow duplicate if value is the same
我正在尝试通过 ID 对一些最大值进行分组(直到这里我弄明白了),我还需要 select 具有最大值的人的名字,所以我的分组如果具有该分组 ID 的两个人具有相同的值(最大值),则应允许重复。
这是我目前所知道的。
SELECT MGR,MAX(SAL) AS MaxSal
FROM EMP
WHERE MGR IS NOT NULL
GROUP BY MGR
现在我还需要提取字段 ENAME
,我该怎么做,同时分组并在必要时允许重复分组?
解决方案是解析函数。以下是我如何实现我想要的结果。
SELECT MGR,ENAME,SAL
FROM
(
SELECT MGR,ENAME,SAL,
MAX(SAL) OVER (PARTITION BY MGR) AS MaxSal
FROM EMP
)
WHERE SAL=MaxSal
启动 Oracle 12c,一个选项在 order by
子句和 fetch
子句中使用 window 函数:
select mgr, ename, sal
from emp
where mgr is not null
order by rank() over(partition by mgr order by sal desc)
fetch first row with ties
我正在尝试通过 ID 对一些最大值进行分组(直到这里我弄明白了),我还需要 select 具有最大值的人的名字,所以我的分组如果具有该分组 ID 的两个人具有相同的值(最大值),则应允许重复。
这是我目前所知道的。
SELECT MGR,MAX(SAL) AS MaxSal
FROM EMP
WHERE MGR IS NOT NULL
GROUP BY MGR
现在我还需要提取字段 ENAME
,我该怎么做,同时分组并在必要时允许重复分组?
解决方案是解析函数。以下是我如何实现我想要的结果。
SELECT MGR,ENAME,SAL
FROM
(
SELECT MGR,ENAME,SAL,
MAX(SAL) OVER (PARTITION BY MGR) AS MaxSal
FROM EMP
)
WHERE SAL=MaxSal
启动 Oracle 12c,一个选项在 order by
子句和 fetch
子句中使用 window 函数:
select mgr, ename, sal
from emp
where mgr is not null
order by rank() over(partition by mgr order by sal desc)
fetch first row with ties