Je veux trouver la 2ème, 3ème..nième valeur maximale d'une colonne
Vous pouvez trier la colonne en format décroissant, puis obtenir la valeur à partir de la nième ligne.
MODIFIER::
Mis à jour selon la demande de commentaire.WARNINGcomplètement non testé!
SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6
Quelque chose comme ce qui précède devrait fonctionner pour Oracle ... vous devrez peut-être obtenir la syntaxe correcte en premier!
Considérez la table des employés suivante avec une seule colonne pour le salaire.
+ ------ + | Sal | + ------ + | 3500 | 2500 | 2500 | 5500 | | 7500 | + ------ +
La requête suivante renvoie l'élément Nth Maximum.
select SAL from EMPLOYEE E1 where
(N - 1) = (select count(distinct(SAL))
from EMPLOYEE E2
where E2.SAL > E1.SAL )
Pour par exemple. lorsque la deuxième valeur maximale est requise,
select SAL from EMPLOYEE E1 where
(2 - 1) = (select count(distinct(SAL))
from EMPLOYEE E2
where E2.SAL > E1.SAL )
+ ------ + | Sal | + ------ + | 5500 | + ------ +
Vous n'avez pas spécifié quelle base de données, vous pouvez faire sur MySQL
SELECT column FROM table ORDER BY column DESC LIMIT 7,10;
Souhaitez sauter les 7 premiers, puis vous obtenez les dix prochaines plus élevé.
Là encore, vous devrez peut-être réparer votre base de données, mais si vous souhaitez que la deuxième valeur d'un jeu de données comportant potentiellement la valeur dupliquée, vous souhaiterez également créer un groupe:
SELECT column
FROM table
WHERE column IS NOT NULL
GROUP BY column
ORDER BY column DESC
LIMIT 5 OFFSET 2;
Souhaitez ignorer les deux premiers, puis vous obtiendrez les cinq prochains plus élevé.
Pure SQL (note: je recommanderais l’utilisation de fonctionnalités SQL spécifiques à votre SGBD, car ce sera probablement plus efficace). Cela vous donnera la n + 1ème valeur la plus grande (pour obtenir la plus petite valeur, retournez le <). Si vous avez des doublons, faites-les COUNT (DISTINCT VALUE) ..
select id from table order by id desc limit 4 ;
+------+
| id |
+------+
| 2211 |
| 2210 |
| 2209 |
| 2208 |
+------+
SELECT yourvalue
FROM yourtable t1
WHERE EXISTS( SELECT COUNT(*)
FROM yourtable t2
WHERE t1.id <> t2.id
AND t1.yourvalue < t2.yourvalue
HAVING COUNT(*) = 3 )
+------+
| id |
+------+
| 2208 |
+------+
(Nom de la table = Étudiant, Nom de la colonne = Marque)
select * from(select row_number() over (order by mark desc) as t,mark from student group by mark) as td where t=4
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);
Select max(sal)
from table t1
where N (select max(sal)
from table t2
where t2.sal > t1.sal)
Pour trouver le Nième max sal.
select column_name from table_name
order by column_name desc limit n-1,1;
où n = 1, 2, 3, .... nième valeur maximale.
Voici une méthode pour Oracle. Cet exemple obtient la 9ème valeur la plus élevée. Remplacez simplement le 9 par une variable bind contenant la position que vous recherchez.
select created from (
select created from (
select created from user_objects
order by created desc
)
where rownum <= 9
order by created asc
)
where rownum = 1
Si vous voulez la nième valeur unique, vous devez ajouter DISTINCT sur le bloc de requête le plus à l'intérieur.
Ceci est une requête pour obtenir le nth le plus élevé de la colonne, mettez n = 0 pour le deuxième plus élevé et n = 1 pour le 3ème le plus élevé, etc.
SELECT * FROM TableName
WHERE ColomnName<(select max(ColomnName) from TableName)-n order by ColomnName desc limit 1;
SELECT * FROM tablename
WHERE columnname<(select max(columnname) from tablename)
order by columnname desc limit 1
MySQL:
select distinct(salary) from employee order by salary desc limit (n-1), 1;
(TableName = Student, ColumnName = Mark):
select *
from student
where mark=(select mark
from(select row_number() over (order by mark desc) as t,
mark
from student group by mark) as td
where t=2)
Je pense que la requête ci-dessous fonctionnera parfaitement sur Oracle sql ... Je l’ai testée moi-même ..
Informations relatives à cette requête: cette requête utilise deux tables nommées employee
et department
avec des colonnes dans l'employé nommé: name
(nom de l'employé), dept_id
(commun à l'employé et au service), salary
Et les colonnes de la table department: dept_id
(commun à la table employee également), dept_name
SELECT
tab.dept_name,MIN(tab.salary) AS Second_Max_Sal FROM (
SELECT e.name, e.salary, d.dept_name, dense_rank() over (partition BY d.dept_name ORDER BY e.salary) AS rank FROM department d JOIN employee e USING (dept_id) ) tab
WHERE
rank BETWEEN 1 AND 2
GROUP BY
tab.dept_name
merci
Solution pour trouver la Nième valeur maximale d'une colonne particulière dans SQL Server:
Table des employés:
Tableau de vente:
Données de la table des employés:
==========
Id name
=========
6 ARSHAD M
7 Manu
8 Shaji
Données du tableau des ventes:
=================
id emp_id amount
=================
1 6 500
2 7 100
3 8 100
4 6 150
5 7 130
6 7 130
7 7 330
Requête pour connaître les détails d'un employé ayant réalisé la plus forte vente/N ème vendeur
select * from (select E.Id,E.name,SUM(S.amount) AS 'total_amount' from employee E INNER JOIN Sale S on E.Id=S.emp_id group by S.emp_id,E.Id,E.name ) AS T1 WHERE(0)=( select COUNT(DISTINCT(total_amount)) from(select E.Id,E.name,SUM(S.amount) AS 'total_amount' from employee E INNER JOIN Sale S on E.Id=S.emp_id group by S.emp_id,E.Id,E.name )AS T2 WHERE(T1.total_amount<T2.total_amount) );
Dans le WHERE (0) remplacer 0 par n-1
Résultat:
========================
id name total_amount
========================
7 Manu 690
Vous pouvez simplifier comme ça
SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT TOP 4 Sal FROM TableName ORDER BY Sal DESC)
Si le Sal contient des valeurs en double, utilisez-le.
SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT distinct TOP 4 Sal FROM TableName ORDER BY Sal DESC)
le 4 sera la nième valeur, il peut contenir n'importe quelle valeur maximale telle que 5 ou 6, etc.
Select min(fee)
from fl_FLFee
where fee in (Select top 4 Fee from fl_FLFee order by 1 desc)
Changer le numéro quatre avec N.
select sal,ename from emp e where
2=(select count(distinct sal) from emp where e.sal<=emp.sal) or
3=(select count(distinct sal) from emp where e.sal<=emp.sal) or
4=(select count(distinct sal) from emp where e.sal<=emp.sal) order by sal desc;
Dans PostgreSQL, trouver le N-ème salaire le plus élevé dans la table des employés.
SELECT * FROM Employee WHERE salary in
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT N)
ORDER BY salary ASC LIMIT 1;
Requête mysql : supposons que je souhaite connaître la nième table des employés du formulaire de salaire maximum
select salary
form employee
order by salary desc
limit n-1,1 ;
Requête SQL simple pour obtenir les détails de l'employé qui a Nth MAX Salary
dans la table Employee
.
sql> select * from Employee order by salary desc LIMIT 1 OFFSET <N - 1>;
Considère la structure de la table comme:
Employé ( Id [auto_increment clé primaire]], Nom [varchar (30)], Salaire [int]);
Exemple:
Si vous avez besoin du 3ème salaire MAX
dans le tableau ci-dessus, la requête sera:
sql> select * from Employee order by salary desc LIMIT 1 OFFSET 2;
De même:
Si vous avez besoin du 8ème salaire MAX
dans le tableau ci-dessus, la requête sera:
sql> select * from Employee order by salary desc LIMIT 1 OFFSET 7;
REMARQUE: Lorsque vous devez obtenir la valeur Nth
MAX
, vous devez indiquerOFFSET
sous la forme (N - 1).
Comme ceci, vous pouvez effectuer le même type d'opération en cas de salaire croissant.
Dans SQL Server, il suffit de:
select distinct top n+1 column from table order by column desc
Et jetez ensuite la première valeur, si vous n'en avez pas besoin.
Un autre pour Oracle utilisant des fonctions analytiques:
select distinct col1 --distinct is required to remove matching value of column
from
( select col1, dense_rank() over (order by col1 desc) rnk
from tbl
)
where rnk = :b1
J'ai juste creusé cette question en cherchant moi-même la réponse, et cela semble fonctionner pour SQL Server 2005 (dérivé de solution de Blorgbeard ):
SELECT MIN(q.col1) FROM (
SELECT
DISTINCT TOP n col1
FROM myTable
ORDER BY col1 DESC
) q;
Effectivement, il s’agit d’une SELECT MIN(q.someCol) FROM someTable q
, avec le n supérieur de la table récupérée par la requête SELECT DISTINCT...
.
pour SQL 2005:
SELECT col1 from
(select col1, dense_rank(col1) over (order by col1 desc) ranking
from t1) subq where ranking between 2 and @n
Réponse: Top seconde:
select * from (select * from deletetable where rownum <=2 order by rownum desc) where rownum <=1