我有两个表部门和工作处;值是这样的
INSERT INTO DEPT(DEPTID, DEPTNAME) VALUES
( 1, 'DEPT1'),
(2, 'DEPT2'),
(3,'DEPT2'),
(4,'DEPT4'),
(5,'DEPT4'),
(6,'DEPT6');
INSERT INTO WORK (WORKID, DEPTID, SAL,CITYID) VALUES
( 100,1,1000,10),
( 100,2,2000,10),
( 200,1,2500,20),
( 300,3,1000,10),
( 300,6,3000,10),
( 300,6,1000,30)
;
对于给定的cityid(工作表),获取每个deptname的所有deptid(来自dept表),并在工作表中进行匹配(如果存在显示计数(工作表中存在的deptids的数量)),而avgsal否则为0,表示count和avgsal所有部门名称以相同的顺序出现在部门表中。输出应该是这样
Cityid deptname count avg-sal
10 dept1 1 1000
10 dept2 2 1500
10 dept4 0 0
10 dept6 1 3000
Grandtotal 3 2333.33
我尝试通过联接,但无法正常工作
答案 0 :(得分:0)
您有一个非常奇怪的部门表-包含重复项。
无论如何,这是join
和group by
:
select 10 as cityid, coalesce(d.deptname, 'Total') as name,
count(w.workid) as cnt,
avg(sal) as average_salary
from dept d left join
work w
on w.deptid = d.deptid and w.cityid = 10
group by grouping sets ((w.cityid, d.deptname) ());
Here是db <>小提琴。
请注意,这会将平均薪水作为整个人口的平均值。这通常是人们想要的。该值为1750,对我来说似乎正确。