我正在尝试让数据库中的用户拥有数据库中最大段的所有权.为此,我正在尝试:
SELECT owner,MAX(bytes) FROM SYS.DBA_SEGMENTS GROUP BY owner HAVING ROWNUM <= 1;
但是,这会返回“不是GROUP BY表达式”.为什么我不能只选择第一行?我该怎么写这个查询?谢谢!
解决方法
您可以.在Oracle 12c中,您可以:
SELECT owner,MAX(bytes) FROM SYS.DBA_SEGMENTS GROUP BY owner ORDER BY MAX(bytes) DESC FETCH FIRST ROW ONLY;
注意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;