SQL oracle: 需要显示查询。
SQL oracle: Need to display a query.
所以我有 3 个表link编在一起,分别命名为 office、employee 和 dependent。
办公室:Oid (PK),办公室名称
员工:EID(PK)、Fname、Lname、JobTitle、薪水、DOH、性别、DOB、OID(FK1)、主管(FK2)
家属:DID(PK)、Fname、Lname、性别、EID(FK1)
这是表格图片的 link:
http://classweb2.mccombs.utexas.edu/mis325/class/hw/hw12a.jpg
我需要显示受抚养人数最多的 5 名员工的姓名和 EID,如果最大的 5 名员工并列,那么我需要显示所有并列的员工。
我对如何开始感到困惑。请帮忙 :)
提前谢谢你
嗯,我会尝试这样的事情:
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
简单分解问题:
一个 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
我建议你 运行 每一步并确保它给你预期的结果。
所以我有 3 个表link编在一起,分别命名为 office、employee 和 dependent。
办公室:Oid (PK),办公室名称
员工:EID(PK)、Fname、Lname、JobTitle、薪水、DOH、性别、DOB、OID(FK1)、主管(FK2)
家属:DID(PK)、Fname、Lname、性别、EID(FK1)
这是表格图片的 link: http://classweb2.mccombs.utexas.edu/mis325/class/hw/hw12a.jpg
我需要显示受抚养人数最多的 5 名员工的姓名和 EID,如果最大的 5 名员工并列,那么我需要显示所有并列的员工。
我对如何开始感到困惑。请帮忙 :) 提前谢谢你
嗯,我会尝试这样的事情:
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
简单分解问题:
一个 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
我建议你 运行 每一步并确保它给你预期的结果。