1

我是 SQL 新手,所以这个问题可能很愚蠢。

这是相关表的示例行:学生:

+-------+----------+---------+------+------+-------+---------+-----------+
| StuID | LName    | Fname   | Age  | Sex  | Major | Advisor | city_code |
+-------+----------+---------+------+------+-------+---------+-----------+
|  1001 | Smith    | Linda   |   18 | F    |   600 |    1121 | BAL       |

Minor_in:

+-------+------+
| StuID | DNO  |
+-------+------+
|  1004 |  520 |

部门:

+------+----------+--------------------------+------+--------------+--------+
| DNO  | Division | DName                    | Room | Building     | DPhone |
+------+----------+--------------------------+------+--------------+--------+
|   10 | AS       | History of Art           | 268  | Mergenthaler |   7117 |

我想在 CS 专业 (DNO = 600) 中找到最受欢迎的辅修学生这是我的查询,它有效但很难看:

SELECT DNO, count 
FROM (SELECT DNO, COUNT(*) AS count
      FROM Minor_in
      WHERE StuID IN (SELECT StuID
                      FROM Student
                      WHERE (Major = 550 OR Major = 600))
      GROUP BY DNO
) AS C1
WHERE count IN (
                SELECT MAX(count)
                FROM (
                      SELECT DNO, COUNT(*) AS count
                      FROM Minor_in
                      WHERE StuID IN (SELECT StuID
                                      FROM Student
                                      WHERE (Major = 550 OR Major = 600))
                      GROUP BY DNO
                      ) AS MinorCount
                );

有没有更好的办法?非常感谢!

4

1 回答 1

0

这个怎么样?

select stuid.dno, count (*)
from stuid inner join student
on stuid.stuid = student.stuid 
where student.major in (550, 600)
group by stuid.dno
order by count (*) desc

我假设 dnos 550 和 600 是计算机科学课程

于 2013-10-15T03:19:21.357 回答