2009-10-03 6 views
0

Lorsque vous utilisez MySQL, vous pouvez faire quelque chose comme ceci:MYSQL obtenir le montant des résultats

SELECT * FROM student WHERE teacher_id = 1 

... vous obtenez le nombre de résultats, et que le résultat. Mais je ne veux que le nombre de résultats, mais pour chaque enseignant. Est-ce possible dans mysql comme sizeof ou quelque chose comme ça?

De même, s'il y a des enseignants qui n'ont pas d'étudiants, est-ce vrai qu'il n'y a pas dans la liste? ou faut-il dire 0?

Répondre

3

Voulez-vous dire que vous voulez le nombre d'étudiants pour chaque enseignant? Vous pouvez utiliser quelque chose comme ceci:

SELECT teacher_id, count(*) AS student_count 
FROM student 
GROUP BY teacher_id 

Les enseignants qui n'ont pas d'élèves ne sont pas admissibles. Pour les inclure dans les résultats, vous devez utiliser un JOIN (en supposant que vous avez une table teacher):

SELECT teacher.id, sum(if(student.id IS NULL, 0, 1)) AS student_count 
FROM teacher 
    LEFT JOIN student ON student.teacher_id=teacher.id 
GROUP BY teacher.id 
+0

s'il y a des enseignants qui ne disposent pas d'étudiants est-il vrai qu'il n'y a pas dans la liste? ou faut-il dire 0? – matthy

1
SELECT teacher_id, count(*) as count FROM student GROUP BY teacher_id; 
1

Utilisation:

SELECT t.teacher_id, 
      IFNULL(ns.num_students, 0) 
    FROM TEACHERS t 
LEFT JOIN (SELECT s.teacher_id, 
        COUNT(s.student_id) 'num_students' 
      FROM STUDENTS s 
     GROUP BY s.teacher_id) ns ON ns.teacher_id = t.teacher_id 
Questions connexes