2013-02-03 4 views
3

경우 I 다음 MySQL의 쿼리가 :NULL을 반환 카운트 (*)가 제로

SELECT count(student_name) AS total_student,school_name FROM `student` 
LEFT JOIN school_info ON school_info.school_id=student.school_id 
WHERE student.status='0' 

그것은 반환

total_student school_name 
    0    NULL 

무엇을 달성하려고하는 것은,이다 total_student = 0 다음 쇼 경우 값 또는 널이 아님

total_student school_name 

제발 어떻게 할 수 있습니까?

감사합니다 :)

답변

7

첫째, 당신은 school_name하여 그룹 쿼리의 하단에 GROUP BY 조항이 누락 : 당신은 단순히 어디 total_student 행을 표시하지 싶은 경우에,

SELECT count(student_name) AS total_student, school_name 
FROM student 
    LEFT JOIN school_info ON school_info.school_id = student.school_id 
WHERE student.status = '0' 
GROUP BY school_name 

을 당신이에 LEFT JOIN을 변경할 수

SELECT count(student_name) AS total_student, school_name 
FROM student 
    LEFT JOIN school_info ON school_info.school_id = student.school_id 
WHERE student.status = '0' 
GROUP BY school_name 
HAVING count(student_name) > 0 

또는 = 0 다음은 MySQL의 HAVING 절을 사용할 수 있습니다을 사용하여이 경우 동일한 작업을 수행하십시오. http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

+1

굉장하고, 행복한 코딩! – Anton

0

하는 CASE 구문을 사용하려고 사항 :가 null과 0을 대체하지만 여전히 행을 갖고 싶어 대신하는 경우

마지막으로, 당신은에 합계를 받고 select 문을 업데이트 할 수 있습니다 0 행을 걸러 내기 위해 HAVING 절을 추가하십시오.

SELECT count(student_name) AS total_student,school_name FROM `student` 
LEFT JOIN school_info ON school_info.school_id=student.school_id 
WHERE student.status='0' 
HAVING total_student > 0 
1

:

SELECT IF(COUNT(student_name) = 0, NULL, COUNT(student_name)) AS total_student, school_name