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
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