Quelqu'un peut-il me dire s'il vous plaît comment trouver la N ème entrée la plus grande d'un tableau dans Oracle?
Comme pour le plus grand, nous pouvons utiliser MAX (nom_colonne) existe-t-il un moyen efficace de trouver n plus grand aussi ?
SELECT * FROM ( SELECT quelque_colonne, Row_number () sur (ordre de your_sort_column desc) sous le nom row_num FROM quelque_table ) t WHERE row_num = 3
Si vous vous attendez à ce que plusieurs lignes aient la même valeur dans your_sort_column
, vous pouvez également utiliser la fonction rank ()
SELECT * FROM ( SELECT une colonne, Rank () sur (ordre de votre colonne colonne_sort) comme row_rank FROM une table ) t WHERE row_rank = 3Cela peut retourner plus d'une ligne ..
vous pouvez trouver la nième plus grande valeur de colonne en utilisant la requête suivante
SELECT * FROM TableName a WHERE
n = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE a.ColumnName <=b.ColumnName);
Je pense que la requête ci-dessous fonctionnera pour trouver le deuxième enregistrement le plus élevé avec NOT IN.
SELECT MAX(
userId
) FROM table WHERE userId
NOT IN (SELECT MAX (userId
) FROM table) </ code>
simple et utile ...
Cela fonctionne pour le deuxième salaire le plus élevé,
$query = "SELECT * FROM `table_name` ORDER BY field_name` DESC LIMIT 1 , 1 ";
Pour obtenir le deuxième plus gros 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
SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (
SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal
);
Remplacez &N
par le numéro souhaité. Par exemple, 2
vous donnera le deuxième salaire en importance.
Si vous utilisez PL/SQL, exécutez simplement l’instruction. Il va demander pour N.
Essaye ça:
SELECT DISTINCT TOP 3 id,[Password]
FROM Users_changepassword
WHERE [UserId] = 3
ORDER BY id DESC
Vous pouvez essayer ce sql où la fonction Row_number () de 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
SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee)
Vous pouvez utiliser CONNECT BY PRIOR
en:
CREATE TABLE t(i INT, sal INT);
INSERT INTO t(i, sal)
SELECT 1,100 FROM dual UNION
SELECT 2,100 FROM dual UNION
SELECT 3,200 FROM dual UNION
SELECT 4,500 FROM dual UNION
SELECT 5,1000 FROM dual;
Question:
SELECT level, MAX(sal) AS sal
FROM t
--WHERE level = 2 -- set position here
CONNECT BY prior sal > sal
GROUP BY level
ORDER BY level;
EDIT:
La deuxième approche consiste à utiliser la fonction analytique NTH_VALUE
:
SELECT DISTINCT NTH_VALUE(sal, 2) OVER(ORDER BY sal DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM t;
Essaye ça,
SELECT Sal FROM Tab ORDER BY Sal DESC LIMIT 2,1
Vous pouvez ORDER BY column name
puis LIMIT 1,1
pour obtenir le second
modifier
Oups, n'a pas vu la balise Oracle, désolé.ORDER BY column name WHERE ROWNUM = 2
devrait mieux fonctionner.