2013-03-22 5 views
1

다른 프로젝트로 구성된 하나의 테이블을 학생들이 제출했습니다. 각 프로젝트는 세 명의 다른 심사 위원에 의해 심사되어야합니다. 그래서 projectid와 judgeid를 포함하는 또 다른 점수 표가 있습니다. 나는 아직 세 번 판단되지 않은 프로젝트를 선택할 수있는 쿼리를 작성하려고합니다. 다른 테이블에 3 번 존재하지 않는 것을 하나의 테이블에서 선택

다음은 몇 가지 샘플 테이블의

...

프로젝트

projectid | projectname 
----------------------- 
9   | Kintetics 
11  | Volcano 
15  | Robots 
22  | Oceanlife 

나는이 쿼리 프로젝트 (11), (15)을 반환 기대

scoreid (AI) | projectid | judgeid | score 
------------------------------------------ 
1   | 9   | 15  | 5 
2   | 11  | 15  | 18 
3   | 9   | 23  | 12 
4   | 11  | 23  | 11 
5   | 9   | 45  | 19 
6   | 22  | 15  | 3 

점수, 22 때문에 그 세 명은 아직 세 명의 판사가 배정되지 않았습니다.

+0

당신이 질문 –

답변

4
SELECT a.ProjectID, a.ProjectName 
FROM Projects a 
     LEFT JOIN Scores b 
      ON a.ProjectID = b.ProjectID 
GROUP BY a.ProjectID, a.ProjectName 
HAVING COUNT(a.ProjectID) < 3 

조인에 대해 더 친절하게 아래 링크를 방문, 더 많은 지식을 얻으려면 :

OUTPUT

╔═══════════╦═════════════╗ 
║ PROJECTID ║ PROJECTNAME ║ 
╠═══════════╬═════════════╣ 
║  11 ║ Volcano  ║ 
║  15 ║ Robots  ║ 
║  22 ║ Oceanlife ║ 
╚═══════════╩═════════════╝ 
+1

정말 고마워요 JW을 바꿔 것이다! 그게 내가 마스터 할 수없는 HAVING 절이다. – rgbflawed

+0

당신을 환영합니다': D' –

0

select * from scores where id not in (select id from scores where project id in (select projectid from scores group by projectid having count(prjectid)=3)) 
0

이 시도 해보십시오 :

SELECT * FROM Projects p WHERE (SELECT COUNT(*) FROM Scores s WHERE s.projectid = p.projectid) < 3 
1

또 다른 대안 :

SELECT a.ProjectID, a.ProjectName 
FROM Projects a 
LEFT JOIN (select ProjectID, count(*) counted from Scores) b 
     ON a.ProjectID = b.ProjectID 
WHERE COALESCE(b.counted,0) < 3 
1
SELECT COUNT(scores.id) AS score_count, projects.* 
FROM scores, projects 
WHERE scores.projectid = projects.id 
GROUP BY projects.id 
HAVING score_count > 2 
관련 문제