0 votes

Fonction Sql Max() sur une condition rownum

J'ai vu quelque chose comme ce qui suit dans notre code de production :

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

Ça m'a paru étrange. Le code ci-dessus s'exécuterait-il dans le but prévu (sélection d'une valeur maximale dans un ensemble de valeurs) ? Cette sélection ne renverrait-elle pas toujours un seul enregistrement à partir duquel la valeur col_val serait choisie ? Merci.

3voto

Shannon Severance Points 8143

Non. Il est garanti d'obtenir le maximum d'un ensemble de valeurs. Elle renverra la première valeur seulement, la première valeur étant déterminée par le plan d'exécution. Selon le plan, la première valeur peut également être la valeur maximale, mais cela peut changer car les plans ne sont pas constants.

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>

0voto

Andrey Points 36869

Il prendra la première ligne qui remplit les conditions. max semble être un excès ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X