如何解决这两个查询?

时间:2013-08-31 04:55:06

标签: mysql sql sql-server sqlite tsql

我是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));

BTW我正在使用MySql WorkBench 5.2并且该语言只允许使用SQL

3 个答案:

答案 0 :(得分:1)

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

如果按顺序减少项目数量,则正确的部门将是列表中的第一个。如果您限制为1,则只会选择该部门。

<小时/> 您的第二个查询需要更多工作,它不会像第一个查询一样干净地提供您正在寻找的信息。再次执行相同的技巧,首先按顺序获取信息,然后查找顶部信息。您的内部查询应该看起来像这样:

(SELECT Essn, COUNT(Dependent_name) AS Dependents
 FROM Dependent
 GROUP BY Essn
 ORDER BY Dependents DESC);

答案 1 :(得分: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

答案 2 :(得分: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

如果您使用上面的子查询运行它,效率很低,因为在使用max来提取员工之前,您需要加入2个大型表Dependent和Employee。家属。但它会奏效!