2010-12-15 4 views
0

Disons que j'ai une table avec deux colonnes (student_id, grade). Student_id est un nombre entier et le grade est un nombre décimal.Comment regrouper dans les gammes de comptage fixes?

Dans le cas où j'ai 1000 étudiants et que je veux les regrouper par classe en groupes de 10 étudiants chacun.

Pour être clair, cela devrait produire 100 groupes. Le premier groupe comprend les 10 notes les plus élevées et le dernier groupe contient les 10 notes les plus basses.

Comment dois-je faire cela? L'optimisation est toujours la bienvenue.

Merci beaucoup.

Joao

+0

Pas besoin de [SQL] dans le titre, compte tenu de la balise SQL. – Donnie

+0

Votre question est incohérente. Il pourrait même ne pas y avoir 10 qualités différentes. Est-ce que vous voulez peut-être vraiment dire "Le premier groupe réunit les 10 plus ÉTUDIANTS et le dernier groupe contient les 10 ÉTUDIANTS les plus bas." ?? Si tel est le cas, sachez que cela pourrait ne pas être possible, car des groupes d'élèves de même niveau peuvent traverser une limite de groupe en fonction du nombre d'élèves. –

+0

Charles, le premier groupe contient les identifiants des élèves ayant les 10 notes les plus élevées et les notes correspondantes. S'il y a 13 notes qui sont égales au maximum, le résultat que je souhaite est d'avoir 10 d'entre elles dans le premier groupe et 3 d'entre elles dans le deuxième groupe. – joaoavf

Répondre

1

ntile donnera un classement d'un montant de godets.

select student_id, ntile(100) over (order by grade desc) from student 
Questions connexes