2014-05-14 2 views
0

클래스에 3 명 이상의 학생 (이 경우 Mrs. Smith)이있는 모든 교사를 나열하는 SQL 쿼리를 작성하고 싶습니다. 원래는 HAVING 절이이를 수행하는 올바른 방법이 될 것이라고 생각했지만 Mrs. Smith과 예상대로 오지 않을 것입니다. 사용 HAVING가 올바른지결과를 제한하기 위해 HAUNT를 사용하여 결과 제한

Teacher   Student 
------------------------- 
Mrs. Smith  Danny 
Mrs. Smith  Emily 
Mrs. Smith  Todd 
Mrs. Smith  Paul 
Mr. French  Sam 
Mr. French  Carol 
Mr. French  Patty 

SELECT DISTINCT Teacher 
FROM Students 
HAVING (COUNT(Teacher) > 3) 
GROUP BY Teacher, Student 
+1

학생 수를 계산해야합니다. – abhi

+1

주문의 중요성 ... 선택, 시작, 가입, 장소, 그룹화, Having. – xQbert

+1

'group by Teacher'. 당신은'group by' 절에'student'를 원하지 않습니다. 그리고,'select'에서'distinct'를 제거하십시오. 'group by '은 거의 필요하지 않습니다. –

답변

4

, 당신은 단지 각 교사가 얼마나 많은 학생 계산하는 동안 기본적으로 당신이 함께 교사 기록을 그룹화하고 올바르게

SELECT Teacher 
FROM Students 
GROUP BY Teacher 
HAVING COUNT(Student) > 3 

를 사용할 필요가있다. 그리고 그 수에 대한 필터링.

+0

'COUNT (*)'또는 'COUNT (DISTINCT Student)'가 여기에 더 적합한 지 확실하지 않습니다. 어느 쪽이든 그것은 'COUNT (교사)'보다 낫다. –

+0

@ebyrob 'COUNT (학생)'이 맞는 것 같아요. 여기, 우리는 학생만을 찾고 있습니다. 가정이 동일합니다. 같은 이름의 다른 학생이있을 수 있습니다. –

+0

'COUNT (학생) '이 새로운 것을 혼란스럽게합니다. SQL 사용자. 'NULL' 학생 행의 수를 건너 뛸 때 (이 경우 존재하지 않는) 단순히 의미를 전달할 때 어떤 의미가 전달되었다고 생각하는 것이 쉽습니다. student라는 ID가 없다는 사실은 아마도 새로운 (아마도 새로운) SQL 사용자 스키마의 디자인 결함 일뿐입니다. –

1

내가 방금 말에 당신의 HAVING 절을 배치 할 필요가 있다고 생각 :

SELECT DISTINCT Teacher 
FROM Students 
GROUP BY Teacher, Student 
HAVING COUNT(Teacher) > 3; 
1

모든 교사가 더 그래서

학생 세 이상 :

select teacher, count(student) --All Teachers 
FROM Students 
GROUP BY Teacher 
HAVING COUNT(student) > 3 --Having more than three students 
1

교사들만 그룹에 변경을하고 예, HAVING가 올바른지

SELECT Teacher 
FROM Students  
GROUP BY Teacher 
HAVING (COUNT(Teacher) > 3) 
2

하여 그룹 후 갖는했습니다. 시도 :

SELECT Teacher 
FROM Students 
GROUP BY Teacher 
HAVING (COUNT(1) > 3) 
관련 문제