0

我是 SQL 新手,我有一个家庭作业。我做对了所有问题,但仍然无法弄清楚这两个问题,所以如果可以的话,请提供帮助。我提前感谢你。

我有四张桌子:

EMPLOYEE which conatin the attributes (Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary, Super_ssn, Dno)

Table DEPARTMENT have the columns ( Dname, Dnumber, Mgr_ssn, Mgr_start_date)

Table PROJECT have the columns ( Pname, Pnumber, Plocation, Dnum)

Table DEPENDENT (Essn, Dependent_name, Sex, Bdate, Relationship)

Q1。对于控制项目数量最多的部门,请列出其名称?我提出了这个查询,但它仍然只给了我每个部门它控制的项目数量,但不能让它工作,因为它只给了我拥有最多的项目:(

SELECT Dname, COUNT(distinct Pnumber) as NumberOfProjects
FROM Department, Project
WHERE Dnum = Dnumber
GROUP BY Dname;

Q2。检索比任何其他员工拥有更多家属的员工的姓名和 Ssn?

我想出了这个,但不知道为什么它不起作用。我不断收到错误

SELECT Fname, Lname, Ssn
FROM Employee
WHERE max((SELECT COUNT(*)
        FROM Dependent
        WHERE Ssn = Essn));

顺便说一句,我使用的是 MySql WorkBench 5.2,语言只是允许使用的 SQL

4

3 回答 3

1

对于您的第一个查询,如果您已经拥有所有部门的列表以及他们控制的项目数量,那么您已经完成了工作。在您的查询中添加一些额外的代码来完成这项工作。

如果您按项目数量降序排列,则正确的部门将是列表中的第一个。如果你限制 1,你只会选择那个部门。


您的第二个查询需要做更多的工作,它没有像第一个查询那样清晰地提供您正在寻找的信息。重复同样的技巧,首先按顺序获取信息,然后查找最上面的信息。您的内部查询可能看起来像这样:

(SELECT Essn, COUNT(Dependent_name) AS Dependents
 FROM Dependent
 GROUP BY Essn
 ORDER BY Dependents DESC);
于 2013-08-31T05:55:28.617 回答
0

您可以将此查询用于 Q2:

SELECT Fname, Lname, Essn FROM(
    SELECT Essn,  Fname, Lname, COUNT(Dependent_name) as NumberOfDependents
    FROM Dependent, Employee
    WHERE Essn = Ssn
    GROUP BY Essn
ORDER BY NumberOfDependents desc)
LIMIT 1

如果您使用上面的子查询运行它,这是低效的,因为您在提取具有最大值的员工之前加入了 2 个大表 Dependent 和 Employee。家属。但它会起作用的!

于 2013-08-31T07:24:37.823 回答
0

您可以将此查询用于 Q1:

    SELECT * FROM(
    SELECT Dname, COUNT(distinct Pnumber) as NumberOfProjects
    FROM Department, Project
    WHERE Dnum = Dnumber
    GROUP BY Dname
ORDER BY COUNT(distinct Pnumber) desc nulls last)
LIMIT 1
于 2013-08-31T06:03:56.143 回答