2017-06-08 2 views
2

Ich versuche, die Werte innerhalb meiner Tabelle durch den Bereich fallen sie in, zum Beispiel Eimer, wenn meine Tabelle ist die folgende:SQL Query zu Bucket Tabelle Artikel

course_name | current enrollment 
course_1 | 10 
course_2 | 200 
course_3 | 500 

ich folgendes Ergebnis:

enrollment_range | courses 
10    | 1 
100    | 1 
500    | 1 

Bisher habe ich folgendes:

SELECT 
    CASE 
    WHEN courses.current_enrollment >= 500 THEN 500 
    WHEN courses.current_enrollment >= 250 THEN 250 
    WHEN courses.current_enrollment >= 100 THEN 100 
    WHEN courses.current_enrollment >= 50 THEN 50 
    WHEN courses.current_enrollment >= 30 THEN 30 
    WHEN courses.current_enrollment >= 10 THEN 10 
    END enrollment_range, count() AS total 
FROM courses 
GROUP BY enrollment_range 
ORDER BY enrollment_range ASC 

aber ich mit einem zusätzlichen Ergebnis am Ende, dass die Gesamtzahl der ist Kurse, die ich habe, so dass ich etwas wie folgt aus:

enrollment_range | courses 
10    | 1 
100    | 1 
500    | 1 
       | 3 
+0

Ihre Abfrage würde keine Nullwerte ergeben, daher glaube ich nicht, dass dies die Abfrage ist, die Sie wirklich ausführen. –

+0

@GordonLinoff das war ein Fehler meinerseits beim Kopieren des Ergebnisses. Ich habe die notwendigen Änderungen vorgenommen. Danke für das Aufzeigen! – rdurrani

+0

Es gibt keine Möglichkeit, das Endergebnis mithilfe der von Ihnen bereitgestellten SQL-Abfrage zu erstellen. Ich denke, Sie müssen zumindest etwas haben wie: WANN courses.current_enrollment> = 10 und courses.current_enrollment <30 THEN '10 -30 'um das Endergebnis zu zeigen. –

Antwort

0

In SQL, sollten Sie eine Gruppe in der Zählung verwenden. In meinem SQL-Server, kann ich das richtige Ergebnis mit dem folgenden Skript erzeugen:

SELECT 
    CASE 
    WHEN current_enrollment >= 500 THEN 500 
    WHEN current_enrollment >= 250 THEN 250 
    WHEN current_enrollment >= 100 THEN 100 
    WHEN current_enrollment >= 50 THEN 50 
    WHEN current_enrollment >= 30 THEN 30 
    WHEN current_enrollment >= 10 THEN 10 
    END as enrollment_range, t.course_name, t.count 
FROM courses 

join 
(select Count(course_name) as count,course_name FROM courses group by course_name) t 

on courses.course_name = t.course_name 
+0

Ich habe derzeit einen 'GROUP BY-Registrierungsbereich'. Würde das nicht demselben Zweck dienen? – rdurrani

+0

Sie zeigen in Ihrem Code niemals "Gruppe nach" an. Sind Sie auch cource_2 100 oder 200? –

+0

Die zusätzlichen Kurse wurden durch Kurse verursacht, deren Einschreibung unter 10 liegt. Danke für Ihre Hilfe! – rdurrani

0

Das zusätzliche Ergebnis war die Anzahl der Kurse, die nicht innerhalb der angegebenen Klammern, in diesem Fall Kurse mit Anmeldung unter 10 fielen.