2017-06-08 42 views
2

我試圖通過它們落在範圍內桶我的表內的值,例如,如果我的表如下:SQL查詢來鬥表項

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

我得到以下結果:

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

到目前爲止,我有以下幾點:

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 

但我結束了一個額外的結果是總數我有我的課程,所以我得到如下內容:

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

您的查詢不會產生零值,所以我不認爲這是您真正運行的查詢。 –

+0

@GordonLinoff這是我在複製結果時發生的錯誤。我做了必要的編輯。感謝您指出! – rdurrani

+0

使用您提供的sql查詢無法產生最終結果。我想你至少需要像WHEN courses.current_enrollment> 10和courses.current_enrollment <30 THEN '10 -30'來顯示最終結果。 –

回答

0

在你sql中,你應該在計數中使用一個組。在我的SQL服務器,我可以使用下面的腳本產生正確的結果:

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

我目前有一個'GROUP BY enrollment_range'。這不會達到同樣的目的嗎? – rdurrani

+0

你永遠不會在你的代碼中顯示任何'group by'。另外,你是cource_2 100還是200? –

+0

額外的課程是由於入學率低於10的課程造成的。感謝您的幫助! – rdurrani

0

額外的結果是那不屬於規定的括號內,在這種情況下的課程,課程,低於10招生數。