2016-04-26 39 views
1

所以我有3个表链接在一起命名办公室,员工和从属。SQL oracle:需要显示查询。

办公室:Oid的(PK),officeName

员工:EID(PK),FNAME,LNAME,JOBTITLE,工资,卫生司,性别,出生日期,OID(FK-1),监事(FK2)

相关:DID(PK),FNAME,LNAME,性别,EID(FK1)

这里是链接到表的图片: http://classweb2.mccombs.utexas.edu/mis325/class/hw/hw12a.jpg

我需要显示级联名和5名员工的EID如果有的话,家属人数最多是五大领带,那么我需要展示所有的搭售员工。

我对如何开始感到困惑。请帮助:) 预先感谢您

+1

也许从这里开始 - [select](https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10002.htm) –

回答

0

就坏了这个问题:

多少家属的EID的:

SELECT EID, COUNT(*) AS C 
FROM Dependent 
GROUP BY EID 

添加排名

SELECT EID, C, RANK() OVER (ORDER BY C DESC) 
FROM (
    SELECT EID, COUNT(*) AS C 
    FROM Dependent 
    GROUP BY EID 
) S 

我们希望第一个5

SELECT EID 
FROM (
    SELECT EID, C, RANK() OVER (ORDER BY C DESC) AS R 
    FROM (
    SELECT EID, COUNT(*) AS C 
    FROM Dependent 
    GROUP BY EID 
) S 
) S2 
WHERE R <= 5 

现在问你想要的东西:

SELECT * -- or whatever 
FROM Employee 
WHERE EID IN (
    SELECT EID 
    FROM (
    SELECT EID, C, RANK() OVER (ORDER BY C DESC) AS R 
    FROM (
     SELECT EID, COUNT(*) AS C 
     FROM Dependent 
     GROUP BY EID 
    ) S 
) S2 
    WHERE R <=5 
) S3 

我建议你运行的每一个步骤,并确保它给你预期的结果。

-1

嗯我会尝试这样的事:

Select TOP 5 
a.FNAME, 
a.LNAME, 
a.EID, 
Count(b.EID) as Dependents 
FROM employee a 
LEFT JOIN dependent b on a.EID = b.EID 
group by 1,2,3 order by Dependents desc 
+0

这只会给出5个结果,如果有平局。 – Hogan

+0

实际上,这会返回一个语法错误(“ORA-00923:FROM keyword not found where expected”)。然后当你修复那个时,它会返回另一个语法错误。 –