Oracle SQL - 在WITH子句中使用ROWNUM进行分组?

lte*_*e__ 4 sql oracle plsql

我正在尝试让数据库中的用户拥有数据库中最大段的所有权.为此,我正在尝试:

SELECT owner, MAX(bytes) 
FROM SYS.DBA_SEGMENTS
GROUP BY owner
HAVING ROWNUM <= 1;
Run Code Online (Sandbox Code Playgroud)

然而,这会回来"not a GROUP BY expression".为什么我不能只选择第一行?我该怎么写这个查询?谢谢!

Gor*_*off 6

您可以.在Oracle 12c +中,您可以:

SELECT owner, MAX(bytes) 
FROM SYS.DBA_SEGMENTS
GROUP BY owner
ORDER BY MAX(bytes) DESC
FETCH FIRST ROW ONLY;
Run Code Online (Sandbox Code Playgroud)

请注意ORDER BY.

在早期版本中,您需要一个子查询:

SELECT o.*
FROM (SELECT owner, MAX(bytes) 
      FROM SYS.DBA_SEGMENTS
      GROUP BY owner
      ORDER BY MAX(bytes) DESC
     ) o
WHERE rownum = 1;
Run Code Online (Sandbox Code Playgroud)