2010-09-26 48 views
0

我有两个表 - 学生和访谈 - 与价值观:确定记录的出现次数

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

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

而且我必须列出谁从未收到要约的任何学生的SID,但谁拥有了超过五次采访。

我无法确定如何确定学生是否有超过5次采访。我知道你可以对记录进行计数,以查看sID是否超过5次,但我不确定如何格式化它。任何帮助将不胜感激!

+1

什么口味的SQL这是什么? – NullUserException 2010-09-26 01:41:02

+0

我正在使用mySQL – user457666 2010-09-26 01:44:36

回答

4

用途:

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

好吧,这是有道理的,但我不知道我明白'选择空'语句 - 这到底是什么?这工作虽然,非常感谢! – user457666 2010-09-26 02:06:18

+1

@ user457666:在EXISTS子句中,不使用SELECT子句。你可以使用'EXISTS(SELECT 1/0 ...'替换'EXISTS(SELECT NULL ...),它应该返回一个用零除的数学错误 - 它不会。'EXISTS'只对'FROM'子句之后的任何内容。 – 2010-09-26 02:18:23

+0

明白了 - 谢谢! – user457666 2010-09-26 13:19:40

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