我是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
答案 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。家属。但它会奏效!