2017-06-08 2 views
2

Je suis en train de seau valeurs dans ma table par la gamme ils tombent, par exemple, si ma table est la suivante:requête SQL au seau de table Articles

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

Je reçois le résultat suivant:

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

jusqu'à présent, je donne les résultats suivants:

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 

mais je me retrouve avec un résultat supplémentaire qui est le nombre total de cours que j'ai, donc je reçois quelque chose comme ce qui suit:

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

Votre requête ne produirait pas de valeurs nulles, donc je ne crois pas que ce soit la requête que vous exécutez réellement. –

+0

@GordonLinoff que c'était une erreur de ma part dans la copie du résultat. J'ai fait les modifications nécessaires. Merci de l'avoir signalé! – rdurrani

+0

Il n'existe aucun moyen de produire le résultat final en utilisant la requête SQL que vous avez fournie. Je suppose que vous devez au moins avoir quelque chose comme: WHEN courses.current_enrollment> = 10 et courses.current_enrollment <30 THEN '10 -30 'pour montrer le résultat final. –

Répondre

0

En vous sql, vous devez utiliser un groupe dans le compte. Dans mon serveur SQL, je peux produire le résultat correct en utilisant le script suivant:

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

J'ai actuellement un 'GROUP BY enrollment_range'. Cela ne servirait-il pas le même but? – rdurrani

+0

Vous ne montrez jamais de «groupe par» dans votre code. Aussi, est-ce que vous cource_2 100 ou 200? –

+0

Les cours supplémentaires ont été causés par des cours dont l'inscription est inférieure à 10. Merci pour votre aide! – rdurrani

0

Le résultat supplémentaire était le nombre de cours qui ne relèvent pas des crochets prévus, dans ce cas, les cours à moins de 10.