La meilleure façon de le faire est avec des fonctions analytiques, RANK() ou DENSE_RANK() ...
SQL>select*from(2select empno
3, sal
4, rank()over(orderby sal desc)as rnk
5from emp)6where rnk <=57/
EMPNO SAL RNK
---------- ---------- ----------7839500017788300027902300027566297548083285057698285056rows selected.
SQL>
DENSE_RANK() compresse les lacunes lorsqu'il y a égalité:
SQL>select*from(2select empno
3, sal
4, dense_rank()over(orderby sal desc)as rnk
5from emp)6where rnk <=57/
EMPNO SAL RNK
---------- ---------- ----------7839500017788300027902300027566297538083285047698285048070250057rows selected.
SQL>
Les comportements que vous préférez dépend des besoins de votre entreprise.
Il y a aussi la fonction ROW_NUMBER() analyse de la fonction qui permet de retourner un nombre précis de lignes. Cependant, nous devrions éviter d'utiliser des solutions basées sur le numéro de ligne, à moins que la logique d'entreprise est heureuse de façon arbitraire, les tronquer le résultat dans le cas d'une cravate. Il y a une différence entre demander à les cinq valeurs les plus élevées et la cinq premiers enregistrements triés par de hautes valeurs
Il n'y a pas non plus de solution analytique à l'aide de la ROWNUM pseudo-colonne. C'est maladroit, parce que ROWNUM est appliquée avant la clause ORDER BY, ce qui peut conduire à des résultats inattendus. Il est rarement raison de l'utilisation d'ROWNUM au lieu de la fonction ROW_NUMBER() ou l'une des fonctions de classement.
Vous pouvez utiliser QUALIFY ... <= 5 au lieu de l'enveloppant dans un autre select. ADMISSIBLE n'est pas une construction qui Oracle prend en charge. Je le croyais. Ou est le lien de parler d'un autre produit Oracle?http://download.oracle.com/docs/cd/E12032_01/doc/epm.921/html_ir_studio/ir_studio-15-36.html C'est le "Hyperion System 9 BI+ Interactive Reporting le Reporting Interactif Studio" qui ressemble, il prend en charge plus de Oracle SQL standard.
Tous exigent l'utilisation de la OVER clause, qui permet PARTITION BY et ORDER BY clauses de correctement régler le ROW_NUMBER/RANK/DENSE_RANK valeur retournée.
Avant 9i, la seule option était de travailler avec des ROWNUM - qui, incidemment, est plus rapide que l'utilisation ROW_NUMBER (lien).
Merci. La clause OVER était nouveau pour moi. +1 En fait Oracle a introduit les fonctions d'analyse dans 8i, mais seulement en vertu de la licence de l'Édition Entreprise. Dans 9i, ils sont venus sous la licence Standard Edition.
S'il vous plaît poster une requête directement à cette question, n'aime pas cela... LIMIT n'est pas oracle syntaxe. Il est utilisé dans certains autres bases de données, bien que, comme mysql/mariadb/postgresql/sqlite syntaxe, par stackoverflow.com/a/595155/44862
La meilleure façon de le faire est avec des fonctions analytiques, RANK() ou DENSE_RANK() ...
DENSE_RANK() compresse les lacunes lorsqu'il y a égalité:
Les comportements que vous préférez dépend des besoins de votre entreprise.
Il y a aussi la fonction ROW_NUMBER() analyse de la fonction qui permet de retourner un nombre précis de lignes. Cependant, nous devrions éviter d'utiliser des solutions basées sur le numéro de ligne, à moins que la logique d'entreprise est heureuse de façon arbitraire, les tronquer le résultat dans le cas d'une cravate. Il y a une différence entre demander à les cinq valeurs les plus élevées et la cinq premiers enregistrements triés par de hautes valeurs
Il n'y a pas non plus de solution analytique à l'aide de la ROWNUM pseudo-colonne. C'est maladroit, parce que ROWNUM est appliquée avant la clause ORDER BY, ce qui peut conduire à des résultats inattendus. Il est rarement raison de l'utilisation d'ROWNUM au lieu de la fonction ROW_NUMBER() ou l'une des fonctions de classement.
QUALIFY ... <= 5
au lieu de l'enveloppant dans un autre select.ADMISSIBLE n'est pas une construction qui Oracle prend en charge.
Je le croyais. Ou est le lien de parler d'un autre produit Oracle?
http://download.oracle.com/docs/cd/E12032_01/doc/epm.921/html_ir_studio/ir_studio-15-36.html
C'est le "Hyperion System 9 BI+ Interactive Reporting le Reporting Interactif Studio" qui ressemble, il prend en charge plus de Oracle SQL standard.
OriginalL'auteur APC
Essayez celui-ci:
Également prendre un coup d'oeil sur cette ressource pour une description plus détaillée sur la façon rownum œuvres.
OriginalL'auteur road242
Oracle 9i+ fournit des fonctions analytiques:
Tous exigent l'utilisation de la
OVER
clause, qui permetPARTITION BY
etORDER BY
clauses de correctement régler leROW_NUMBER
/RANK
/DENSE_RANK
valeur retournée.Avant 9i, la seule option était de travailler avec des
ROWNUM
- qui, incidemment, est plus rapide que l'utilisationROW_NUMBER
(lien).En fait Oracle a introduit les fonctions d'analyse dans 8i, mais seulement en vertu de la licence de l'Édition Entreprise. Dans 9i, ils sont venus sous la licence Standard Edition.
OriginalL'auteur OMG Ponies
Dans Oracle 12c, cela peut être réalisé à l'aide de
FETCH..FIRST
ROWS..ONLY
Pour aller chercher le top 5 des plus hauts salaires.
OriginalL'auteur Kaushik Nayak
LIMIT
n'est pas oracle syntaxe. Il est utilisé dans certains autres bases de données, bien que, comme mysql/mariadb/postgresql/sqlite syntaxe, par stackoverflow.com/a/595155/44862OriginalL'auteur Gowtham v