2013-08-31 72 views
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谁拥有比任何其他员工更家属?

我想出了这一点,但IDK的,为什么它不工作,我不断收到错误

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

顺便说一句,我使用MySQL工作台5.2和语言只是SQL允许的使用

+0

@Rahul Tripathi非常感谢你的编辑:) –

+0

你用三个不同的DBMS系统标记了你的问题。你在使用哪一个? –

回答

1

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

如果您订购的项目数下降,则正确的部门将成为列表中的第一个。如果你限制1,你只会选择该部门。


你的第二个查询需要更多的工作,它没有像第一个那样提供你正在寻找的信息。再次执行相同的技巧,首先按顺序获取信息,然后查找最上面的一个。你的内部查询或许应该是这个样子:

(SELECT Essn, COUNT(Dependent_name) AS Dependents 
FROM Dependent 
GROUP BY Essn 
ORDER BY Dependents DESC); 
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 
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。家属。但它会起作用!

+0

子查询效率不高,它们就像查询上的投影一样,可以通过查看子查询上的执行计划来检查 – VahiD