Trouver n plus grandes valeurs dans une colonne

J'essaie de find les n plus grands nombres dans une colonne particulière dans SQL Server.

Nous pouvons find la plus grande valeur dans une colonne et la deuxième plus grande valeur facilement.

Mais comment puis-je find dire, 5 plus grandes valeurs dans une colonne?

Dans MySql, vous pouvez utiliser [LIMIT {[offset,] row_count }] pour faire ceci:

 ... ORDER BY SomeField DESC LIMIT @n; 

Pour SQL Server, vous pouvez utiliser le TOP(n) pour get le top n:

 SELECT TOP(@n) SomeFieldName FROM TABLE ORDER BY SomeField DESC 

Par exemple:

 SELECT TOP 5 items_sold FROM tbl_PRODUCT ORDER BY items_sold dESC 

Mise à jour: Si vous avez une autre families tables avec une key étrangère family_ID à la table des produits, et que vous voulez find tous les produits avec les n premiers identifiants de la famille. Ensuite, vous pouvez dot ce:

  SELECT * FROM Products WHERE family_ID IN ( SELECT TOP 5 family_ID FROM families ORDER BY family_ID DESC ) 

Mise à jour 2 : Le produit le plus haut dans chaque famille:

 ;WITH cte AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY family_ID ORDER BY items_sold DESC) row_num FROM @Products ) SELECT * FROM cte where row_num = 1 Order by family_ID 

Voici une démo vivante

Vous l'avez marqué à la fois pour MySQL et SQL Server. Dans SQL Server, vous pouvez utiliser TOP :

 SELECT TOP 5 yourColumn FROM yourTable ORDER BY someColumn DESC; 

TOP limite le nombre de lignes renvoyées. Pour get datatables avec les valeurs les plus grandes / les plus petites, vous devez inclure un ORDER BY .

En MySQL, vous utiliserez LIMIT

Une autre façon de faire cela dans SQL Server utilise row_number() :

 select id from ( select id, row_number() over(order by id desc) rn from yourtable ) x where rn <= 5 

Voir SQL Fiddle avec démo

server SQL

 select min(val) from your_table where val in (select top 5 val from your_table order by val desc) 

mysql

 select min(val) from your_table where val in (select val from your_table order by val desc limit 5)