SQL top 5 loggings algorithm

Permettez-moi d'être le premier à admettre que je ne suis pas le meilleur avec SQL et cette question a été légèrement perplexe.

J'ai besoin de créer un algorithm qui returnnera les 5 premiers loggings d'une table. Les 5 meilleurs records devraient être calculés en additionnant 3 colonnes et les 5 premiers avec le meilleur score devraient être returnnés.

Quelqu'un peut-il me donner quelques indications sur la façon dont je ferais ce genre de déclaration s'il vous plaît.

J'ai joué avec du code pendant un moment et je n'arrive pas à aller vite.

Cordialement Mark

Je viens d'essayer ce qui suit dans SQL Server Management Studio et il semble faire ce que vous voulez:

SELECT TOP 5 * FROM ( SELECT Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable ) tmp ORDER BY Rank DESC 

MODIFIER
Juste remarqué que vous n'avez pas vraiment besoin de la sélection externe et pouvez écrire:

 SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable ORDER BY Rank DESC 

Cela a été testé dans SQL Server 2008.


Il sélectionne la valeur d'une colonne et la sum de trois autres colonnes d'une table appelée MyTable dans la sélection interne. Le sélecteur externe les ordonne par la sum sélectionnée et prend le top 5.

Exemple: La table source contient datatables suivantes

 Value1 Col1 Col2 Col3 V0 0 0 0 V1 1 0 0 V2 2 0 0 V3 3 9 0 V4 4 9 0 V5 5 9 0 V6 6 9 10 V7 7 9 10 

Le select interne créerait

 Value1 Rank V0 0 V1 1 V2 2 V3 12 V4 13 V5 14 V6 25 V7 26 

Et le select externe reviendrait

 Value1 Rank V7 26 V6 25 V5 14 V4 13 V3 12 

Cela pourrait vous donner l'effet désiré:

MySQL

 SELECT Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable ORDER BY Rank DESC LIMIT 5; 

SQL

 SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable ORDER BY Rank DESC; 

SQL Server utilise TOP pour limiter le nombre d'loggings renvoyés dans l' SELECT .

 SELECT TOP 5 Column1, (Column1 + Column2 + Column3) totalSum FROM TableName ORDER BY totalSum DESC 

Si vous voulez gérer le lien, ajoutez WITH TIES dans la clause TOP ,

 SELECT TOP 5 WITH TIES Column1, (Column1 + Column2 + Column3) totalSum FROM TableName ORDER BY totalSum DESC 
  • TSQL TOP

Essayez une combinaison de 'order par' et 'limiter'.

 select *, (col1 + col2 + col3) as total from MyTable order by total desc limit 5; 

Note, ceci est la syntaxe pour mysql, pas sql-server