2010-12-15 5 views
0

Sagen wir, ich habe eine Tabelle mit zwei Spalten (student_id, grade).Wie wird in festen Zählbereichen gruppiert?

student_id ist eine Ganzzahl und Note ist eine Dezimalzahl.

Für den Fall, dass ich 1000 Schüler habe und sie in Gruppen von je 10 Schülern nach Klassen geordnet gruppieren möchte.

Nur um klar zu sein, sollte dies 100 Gruppen produzieren. Die erste Gruppe zählt die 10 höchsten Klassen und die letzte Gruppe die 10 niedrigsten Klassen.

Wie soll ich das tun? Optimierung ist immer willkommen.

Vielen Dank.

Joao

+0

Keine Notwendigkeit für [SQL] im Titel, angesichts der sql-Tag. – Donnie

+0

Ihre Frage ist inkonsistent. Es gibt vielleicht nicht einmal 10 verschiedene Noten. Meinst du vielleicht wirklich "Die erste Gruppe zählt die 10 höchsten STUDENTEN und die letzte Gruppe die 10 niedrigsten STUDENTEN." ?? Wenn Sie dies tun, erkennen Sie, dass dies möglicherweise nicht möglich ist, da Gruppen von Schülern mit derselben Note eine Gruppengrenze basierend auf der Anzahl der Schüler überspannen (überschreiten) können. –

+0

Charles, die erste Gruppe enthält die IDs der Schüler, die die 10 höchsten Noten und die entsprechenden Noten hatten. Wenn es 13 Grade gibt, die gleich Maximum sind, ist das Ergebnis, das ich wünsche, 10 von ihnen in der ersten Gruppe und 3 von ihnen in der zweiten Gruppe zu haben. – joaoavf

Antwort

1

ntile wird ein Ranking um einen Betrag von Eimer geben.

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