结合排序、选择进入和 where 语句以在 oracle sql 中查找最大值
Posted
技术标签:
【中文标题】结合排序、选择进入和 where 语句以在 oracle sql 中查找最大值【英文标题】:combining a sort, select into, and where statement to find a max value in oracle sql 【发布时间】:2013-08-04 02:29:37 【问题描述】:我正在尝试执行 select into 语句以从列中获取最大值。这就是我所拥有的:
SELECT stdid INTO v_stdid
FROM (SELECT stdid FROM STUDENT ORDER BY stdid DESC)
WHERE ROWNUM = 1;
虽然我没有得到正确的值。它应该是 32,但返回的是 9(我有一个 dbms_output_line(v_stdid) 来检查该值。当我将顺序更改为 ASCENDING 我的值更改时,所以我知道发生了一些事情。但是为什么我不能得到正确的最大值?我觉得排序一定没有正确完成。
谢谢!
【问题讨论】:
我面前没有oracle,但你试过SELECT max(stdid) INTO v_stdid
感谢 Nilesh - 我试过了,但仍然得到错误的值(9 而不是 32)。
嗨,Nilesh - 现在 max 可以工作了。 :) 我试图在 varchar 值上使用 max,所以这让我很困惑。我使用了它并且它起作用了: select max(to_number(stdid)) into v_stdid from student;再次感谢!
+1 - 找到自己的答案
ORDER BY function not working in Oracle的可能重复
【参考方案1】:
看来TOP关键字可能对你有帮助。
SELECT stdid INTO v_stdid
FROM (SELECT TOP 1 FROM STUDENT ORDER BY stdid DESC);
我相信这可以消除您遇到的问题,方法是将第二次选择的前 1 个结果的 stdid 返回到 v_stdid,而不必担心 NUMROW 所具有的一些复杂性,如下所示:
Selecting the second row of a table using rownum
【讨论】:
感谢 Mattpic - 不幸的是不能使用 TOP 关键字。这似乎是针对 SQL Select 的。我发现一篇文章说,相当于 TOP 的 Oracle 正在使用 ROWNUM,但就像您提供的链接指出的那样,ROWNUM 会产生自己的问题。 很高兴我能提供帮助,但没有意识到您使用的是 Oracle。简单的解决方法,但是如果您将 ROWNUM 放在括号内,是否可以解决问题? 将 ROWNUM 添加到子查询也不起作用,因为它在排序之前应用,因此子查询不会重新调整最大值。【参考方案2】:你可以这样做:
SELECT max(stdid) INTO v_stdid
FROM STUDENT;
但是,我相信您的问题是 stdid
被存储为字符而不是数字。因此,将其转换为整数:
select max(cast(stdid as int)) into v_stdid
from student;
这也适用于您的原始公式:
SELECT stdid INTO v_stdid
FROM (SELECT stdid FROM STUDENT ORDER BY cast(stdid as int) DESC)
WHERE ROWNUM = 1;
【讨论】:
以上是关于结合排序、选择进入和 where 语句以在 oracle sql 中查找最大值的主要内容,如果未能解决你的问题,请参考以下文章
在 R 脚本中为 R 变量使用 where 子句以在 SQL 语句中使用它