![](/img/trans.png)
[英]How do I select the workers who make more money than their leader within their respective department in sql?
[英]ORACLE SQL - how do I make a count, but the select has more attributes than I want to group?
我有以下關系:
emp : (eid:integer, ename:string, age:integer, salary:decimal(10,2))
作品: (eid:integer, did:integer, pct_time:integer)
部門: (did:integer, dname:string, budget:decimal(10,2), managerid:integer)
預期結果:
創建一個視圖 ManagerSummary,列出每個部門的部門名稱、經理 ID 和經理姓名、經理工資和該部門的員工人數。 該視圖將有五列標題: DeptName 、 MgrID 、 MgrName 、 MgrSalary和EmpCount
我試過的:
Create View ManagerSummary(DeptName, MgrID, MgrName, MgrSalary, EmpCount)
AS Select D.dname, D.managerid, E.ename, E.salary, count(E.ename)
FROM Dept D, Emp E, Works W
Where D.did = w.did AND E.eid = w.eid
GROUP BY D.dname;
我想對員工進行計數,但我不能只對部門進行分組。 當我對部門、managerid、員工姓名和工資進行分組時,計數都將為 1。這沒有任何意義。
要獲取經理信息,您需要在emp(eid)
上加入dept(managerid)
emp(eid)
。 然后你可以引入表格works
和聚合。
考慮:
create view ManagerSummary(DeptName, MgrID, MgrName, MgrSalary, EmpCount)
as select
d.dname,
d.managerid,
e.ename,
e.salary,
count(*)
FROM dept d
inner join emp e on e.eid = d.managerid
inner join works w on d.did = w.did
group by
d.dname,
d.managerid,
e.ename,
e.salary
我將使用派生表進行聚合,然后加入該表。 這樣您就不需要按主查詢中的所有列進行分組(而且通常速度也更快)。
通過使用外部聯接,您還包括沒有員工的部門(不知道是否會發生):
create view manager_summary
as
select d.dname as department_name,
e.eid as mgr_id,
e.ename as mgr_name,
e.salary as mgr_salary,
coalesce(w.num_employees,0) as emp_count
from dept d
join emp e on e.eid = d.managerid
left join (
select did, count(distinct eid) as num_employees
from works
group by did
) w on w.did = d.did
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.