2010-09-26 4 views
0

j'ai deux tables - étudiants et entrevues - avec des valeurs:La détermination du nombre d'occurrences d'un enregistrement

student 
---------- 
sID 
sName 

interview 
---------- 
sID 
date 
outcome = (OFFER, NOOFFER, HIRED) 

Et je dois énumérer les sid tout étudiant qui n'a jamais reçu une offre, mais qui a eu plus de cinq interviews.

Je n'arrive pas à trouver comment déterminer si un étudiant a eu plus de 5 entretiens. Je sais que vous pouvez simplement compter les enregistrements pour voir si le sID est répertorié plus de 5 fois, mais je ne suis pas sûr exactement comment le formater. Toute aide serait grandement appréciée!

+1

Quelle saveur de SQL est-ce? – NullUserException

+0

J'utilise mySQL – user457666

Répondre

4

Utilisation:

SELECT s.sid 
    FROM STUDENT s 
WHERE EXISTS(SELECT NULL -- more than five interviews 
       FROM INTERVIEW i 
       WHERE i.sid = s.sid 
      GROUP BY i.sid 
       HAVING COUNT(*) > 5) 
    AND NOT EXISTS(SELECT NULL -- never received an offer 
        FROM INTERVIEW i 
        WHERE i.sid = s.sid 
        AND i.outcome = 'OFFER') 
+0

Ok, cela a du sens mais je ne suis pas sûr de comprendre l'instruction 'select null' - qu'est-ce que cela fait exactement? Cela a fonctionné, merci beaucoup !! – user457666

+1

@ user457666: Dans une clause EXISTS, la clause SELECT n'est pas utilisée. Vous pouvez remplacer 'EXISTS (SELECT NULL ...' par 'EXISTS (SELECT 1/0 ...', ce qui devrait retourner une erreur mathématique pour la division par zéro - ce ne sera pas le cas. 'EXISTS' ne s'intéresse qu'aux La clause 'FROM' quoi que ce soit après cela –

+0

Got it - thanks !! – user457666

0
select s.sID,s.sName from 
(select sID,count(0) as numInterviews 
    from interview 
    where sID not in (select sID from interview where outcome='OFFER') 
    group by sID 
) as interviewCounts 
join student s on s.sID=interviewCounts.sID 
where interviewCount>5 
Questions connexes