2010-05-30 5 views
0

peut tout expliquer hiow cette requête pour obtenir works..It de la Nième plus grand elemet d'un table.here il est 4 èmeNième plus grand élément d'une table de requêtes SQL

SELECT a.ID 
    FROM tblitem a 
WHERE (4) = (select count(*) 
       from tblItem b 
       where b.id < a.id) 

Merci à l'avance

+0

Etes-vous sûr que c'est le 4ème plus grand pas le 5ème plus petit? – kennytm

+0

Vous pouvez expliquer comment cette requête fonctionne :) – Binu

+0

J'ai testé votre requête. Il choisit définitivement le 5ème plus petit id. – kennytm

Répondre

1
(select count(*) from tblItem b where b.id < a.id) 

est une sous-requête qui trouve le nombre d'éléments (count(*)) dans la table où sa valeur est inférieure à celle en cours (a.id).

4 = (select count(*) from tblItem b where b.id < a.id) 

et nous choisissons celui qui a exactement 4 éléments de moins que la valeur actuelle. Cela signifie a.id devrait être le 5e plus petit.

Pour sélectionner le 4ème élément le plus grand, remplacez < par >=.

2

Peut-être qu'il aide à réécrire la requête un peu:

SELECT a.ID, 
    (select count(*) from tblItem b where b.id < a.id) as cnt 
FROM tblitem a 

Exemple: si la colonne id commence par 1 et par incréments de 2, le résultat ressemblera:

id cnt 
1 0  No rows with a smaller id, subquery returns 0 
3 1  One row with a smaller id, subquery returns 1 
5 2  ... 
7 3 
9 4 
11 5 

Sur la la cinquième ligne, cnt = 4, et cette ligne est choisie par votre clause where.

Questions connexes