Ngu*_*han 0 sql oracle greatest-n-per-group
我想获得DB中最大的邮政编码.通常我会这样做
SELECT *
FROM (
Select * From tbuser ORDER BY zip DESC
)
WHERE rownum = 1
Run Code Online (Sandbox Code Playgroud)
使用此代码,我可以获得最大的邮政编码值而没有重复的行(因为邮政编码不是主键).
但是日本的主要公司说我无法使用它,因为当连接速度很慢或者数据库有非常大的数据时,你无法获得正确的行.如果有人可以提供帮助,对我来说将是一个很大的帮助.
我想获得DB中最大的邮政编码.
如果您真的只想要邮政编码,请尝试:
SELECT MAX(zip) FROM TBUSER;
Run Code Online (Sandbox Code Playgroud)
这将使用zip列上的索引(如果存在).
话虽如此,Oracle通常足够聪明,可以使用适当的优化子查询选择ROWNUM.也许你的主要公司更关心子查询中可能的"全表"ORDER BY`?OTH,如果问题确实是"慢速网络",那么如果您的方法确实导致"过度的带宽消耗",可能需要花一些时间让您的DBA使用网络分析仪或其他工具查看线路.我真诚地怀疑......
如果你想要检索具有最大邮政编码的整行,这里的其他答案略有不同(在我看来,这是使用a的罕见情况之一NATURAL JOIN):
select * from t
natural join (select max(zip) zip from t);
Run Code Online (Sandbox Code Playgroud)
当然,如果是重复,这将返回多行.您必须将其与其他各种答案中发布的几个选项之一相结合,才能返回1行.
作为一个额外的解决方案,并且由于你不被允许使用ROWNUM(并且假设row_number也是任意禁止的),你可以使用如下设计的东西来实现所需的结果:
select * from t
where rowid = (
select min(t.rowid) rid from t
natural join (select max(zip) zip from t)
);
Run Code Online (Sandbox Code Playgroud)
请参阅http://sqlfiddle.com/#!4/3bd63/5
但老实说,没有任何严肃的理由希望这样的查询比简单的... ORDER BY something DESC) WHERE rownum <= 1查询表现更好.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |