如何从具有多个条件的多个表中选择数据?

时间:2015-06-08 19:58:50

标签: sql oracle select

  

有表格FACULTIES(F_NUMB,F_NAME,F_TELEF)和学生(S_NUM,SURNAME,SPECIALTY,GROUP,FACULTY_NUMB)。   请编写SQL查询以获得学生名称,其中学生人数大于教师“计算机科学”。

这就是我正在做的事情:

select faculties.f_name, count(STUDENTS.S_NUM) from STUDENTS, FACULTIES
where students.fac_num=FACULTIES.F_NUMB group by faculties.f_name
having count(STUDENTS.S_NUM) > (select STUDENTS.S_NUM from STUDENTS, FACULTIES
where faculties.f_name='Computer Science' and students.fac_num=faculties.f_numb);

但它仍然没有用。请帮帮我..

2 个答案:

答案 0 :(得分:0)

with
  VW_FACULTIES as 
  ( SELECT f.*,
           ( SELECT COUNT(*) 
             FROM STUDENTS s 
             WHERE s.fac_num = f.f_numb) AS StudentCount
    FROM FACULTIES f)

SELECT
  *
FROM
  VW_FACULTIES f
WHERE
  f.StudentCount > ( SELECT StudentCount 
                     FROM VW_FACULTIES 
                     WHERE f_name='Computer Science')

答案 1 :(得分:0)

试试这个:

SELECT f.f_name
FROM faculties f
WHERE (SELECT COUNT(1) -- Here we get the student count for the faculty
  FROM students s 
  WHERE f.f_numb = s.faculty_numb) > 
  (SELECT COUNT(1)  -- Here we get the CS faculty student count
  FROM students s JOIN faculties f ON (f.f_numb = s.faculty_numb) 
  WHERE  f.f_name = 'Computer science');

对于每一行,您要检查教师有多少学生,并将其与学生数量进行比较"计算机科学"教师有。