2013-11-24 82 views
0
SELECT 
e.lname AS employee_name 
, s.lname AS supervisor_name 
, e.superssn AS supervisor_ssn 
FROM employee e INNER JOIN employee s 
WHERE e.superssn=s.ssn 

我其实有两个问题。第一个是,上面的声明工作得很好。但是现在,它会显示一群员工和他们的主管。组织不良。顺便说一下,有三名主管。有什么办法可以让我们说A和A,B和B,B和B?统计主管的员工人数

第二个问题是,我也尝试只计算每个主管的员工数量,而不是用COUNT()显示他们的名字,我尝试了几个不同的但不工作的员工。

+0

第一部分可以使用'ORDER BY s.lname,e.lname'或类似的方法解决。对于第二个查询,您希望为每位主管显示1行,统计他们监督的员工人数? – OGHaza

+0

对于每一个都是不同的。一个是三个,一个是两个。就这样。 – Modaresi

回答

1

有几件事情

1)这是很好的做法,让您的加入谓词您加入。所以改变:

FROM employee e INNER JOIN employee s WHERE e.superssn = s.ssn 

要:

FROM employee e INNER JOIN employee s ON e.superssn = s.ssn 

2)通过主管让他们在一起,只需使用一个order by

SELECT 
    e.lname AS employee_name 
    , s.lname AS supervisor_name 
    , e.superssn AS supervisor_ssn 
FROM employee e INNER JOIN employee s ON e.superssn = s.ssn 
ORDER BY s.lname 

3)做员工的每一个的数主管使用group byCOUNT集合函数

SELECT 
    s.lname AS supervisor_name, 
    COUNT(*) AS employee_count 
FROM employee e INNER JOIN employee s ON e.superssn = s.ssn 
GROUP BY s.lname 
ORDER BY s.lname 
+0

非常感谢。对于COUNT的第二个问题,它出于某种原因给出语法错误。当我粘贴时,我纠正了lanme,但仍然是同样的事情。 – Modaresi

+0

我在答案中忘记了逗号。这可能是 - 我现在只是改变它 –

+0

哦,是的,就是这样。我很感激。 – Modaresi