rownum条件下的Sql Max()函数

时间:2010-05-25 17:25:48

标签: sql oracle

我在生产代码中看到了以下内容:

select max(col_val) from table_name where 
--set of conditions here
--AND
rownum=1;

这对我来说很奇怪。上述代码是否会按预期目的执行?(从一组值中选择最大值)。这个选择总是不会返回一个从中选择col_val的记录吗?感谢。

2 个答案:

答案 0 :(得分:3)

没有。保证获得一组值的最大值是保证的。它将仅返回第一个值,其中第一个值由执行计划驱动。根据计划,第一个值也可能是最大值,但这可能会改变,因为计划不是一成不变的。

SQL> create table t (i number);

Table created.

SQL> insert into t values (1);

1 row created.

SQL> insert into t values (2);

1 row created.

SQL> select i from t;

     I
----------
     1
     2

SQL> select max(i) from t;

    MAX(I)
----------
     2

SQL> select max(i) from t where rownum = 1;

    MAX(I)
----------
     1

SQL> 

答案 1 :(得分:0)

它将采用满足条件的第一行。这里的最大值似乎过剩了。