11
votes

Comment obtenir la deuxième ou la troisième plus grande entrée d'une table

Quelqu'un peut-il s'il vous plaît dites-moi comment trouver la la plus grande entrée d'une table à Oracle?

Comme pour les plus grands, nous pouvons utiliser max (nom de colonne) existe-t-il un moyen efficace de trouver le nième plus grand aussi


0 commentaires

12 Réponses :


0
votes

Vous pouvez commander par nom de colonne , puis limite 1,1 pour obtenir le second

Modifier

whoops, n'a pas vu la balise Oracle, désolé.
Commandez par nom de colonne où ROWNUM = 2 devrait mieux fonctionner.


3 commentaires

Oracle ne supporte pas la limite.


"Où Rownum = 2" ne retournera jamais de lignes.


De télécharger.oracle.com/docs/cd/b19306_01 /Server.102/b14200/... : "Les conditions de test des valeurs de Rownum supérieures à un entier positif sont toujours fausses." Vous devez alias rownum, puis utiliser cet alias au lieu de Rownum.



0
votes
SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (
  SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal
);
Replace &N with you desired number. For example, 2 will give you the second largest salary.If you are using PL/SQL, just execute the statement. It will prompt for N.

0 commentaires

25
votes
SELECT *
FROM (
  SELECT some_column, 
         rank() over (order by your_sort_column desc) as row_rank
  FROM some_table
) t
WHERE row_rank = 3

2 commentaires

+1: Seuls les fonctions d'analyse sont prises en charge sur 9i +. Et dense_rank pourrait être un meilleur choix que le rang, en fonction des besoins.


Pas vrai. Les fonctions analytiques étaient disponibles en 8i: .Orcle.com / Docs / CD / A87860_01 / DOC / SERVER.817 / A85397 / ... . Mais 8i et 9i sont de toute façon soutenus. Donc, il n'y a aucune raison de poster des réponses couvrant ces versions s'il n'est pas explicitement mentionné



5
votes

Je pense que la requête ci-dessous fonctionnera pour trouver le deuxième enregistrement le plus élevé avec pas dans . xxx

simple et utile ...


0 commentaires

1
votes

Pour obtenir le deuxième plus grand salaire Utilisez ceci:

select salary from 
  (select s2.salary,rownum rm from
     (select distinct salary from employees order by salary desc)
  s2 where rownum<=2)
where rm >= 2


1 commentaires

Fonctionne parfaitement mais je ne comprends toujours pas pourquoi la requête ne fonctionne pas après la modification de la modification ci-dessous: Sélectionnez S2.Salary, RWOWNUM RM (Sélectionnez un salaire distinct de l'ordre des employés par salaire Desc) S2 où RM <= 2



6
votes

Vous pouvez trouver la nième valeur la plus importante d'une colonne à l'aide de la requête suivante

SELECT * 
FROM TableName a 
WHERE n = (
           SELECT count( DISTINCT (b.ColumnName) )
           FROM TableName b 
           WHERE a.ColumnName <= b.ColumnName 
          );


1 commentaires

Bienvenue dans le débordement de la pile! Merci d'avoir posté votre réponse! Assurez-vous de lire le FAQ sur l'auto-promotion avec soin. Notez également qu'il est requis que vous postez une clause de non-responsabilité chaque fois que vous liez sur votre propre site / produit.



1
votes

Cela fonctionne pour le deuxième salaire le plus élevé, xxx


0 commentaires

0
votes

Essayez ceci,

SELECT Sal FROM Tab ORDER BY Sal DESC LIMIT 2,1


0 commentaires

0
votes

Essayez ceci:

SELECT DISTINCT TOP 3 id,[Password] 
FROM Users_changepassword 
WHERE [UserId] = 3
ORDER BY id DESC


0 commentaires

0
votes

Vous pouvez essayer ce SQL où la fonction Row_Number () de l'Oracle SQL est utilisée

select column_name from (
 select column_name ,  
row_number() over (order by column_name  desc) as  row_num  
from table_Name ) tablex
where row_num =3


0 commentaires

0
votes
SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee)

0 commentaires

0
votes

Vous pouvez utiliser connecter par antérieur code> par: xxx pré>

requête: p> xxx pré>

Dbfiddle Demo strong> P>

DBFiddle Demo2 strong> P>


EDIT: strong> p>

Deuxième approche consiste à utiliser NTH_Value code> Fonction analytique: p>

SELECT DISTINCT NTH_VALUE(sal, 2) OVER(ORDER BY sal DESC
       ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM t;


0 commentaires