7
votes

Classement des étudiants en grade en SQL

J'ai une table comme ceci:

Date       Student         Rank

01.01.09   Alex             1
01.01.09   Tom              2
01.01.09   Sam              3
01.02.09   Alex             1
01.02.09   Sam              1
01.02.09   Tom              2


0 commentaires

4 Réponses :


28
votes

Vous souhaitez utiliser la fonction class dans t-sql: xxx

la magie est dans la clause sur . Voir, il divise ces classements par date , puis commandes ces sous-ensembles par score . Brillant, hein?


3 commentaires

La clause sur est incroyable. Vous pouvez faire n'importe quelle fonction d'agrégation avec une partition par . Très soigné.


Wow ... ça impressionne ... mais il a dit que le rang () prend exactement 0 arguments, donc je viens de débarrasser du contenu de parenthèses et cela a fonctionné parfaitement ... merci


+1 Excellent, maintenant: Insérer dans les valeurs _brain (info) (@nugget) :)



1
votes

Vous devez utiliser commander par : xxx

qui commandera les données par date, puis classement. Vous pouvez ajouter autant de champs que vous le souhaitez, tant qu'ils sont comparables (vous ne pouvez pas comparer les blobs ou les champs de texte longs).

espère que cela aide.


0 commentaires

0
votes

Savez-vous d'utiliser un Commander par clause?


0 commentaires

-1
votes

Vous devez écrire une fonction qui informera le rang pour un étudiant et une date donnés. Ensuite, vous pouvez «commander par date, rang ()»


1 commentaires

C'est une idée incroyablement mauvaise. La fonction de rang () devra consulter la table et je sais que SQL Server ne le fusionnera pas dans la requête (pas sûr d'autres DBMS, mais cela me surprendrait).