使用表1

时间:2019-02-23 14:16:17

标签: sql join average

我有两个表部门和工作处;值是这样的

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

我尝试通过联接,但无法正常工作

1 个答案:

答案 0 :(得分:0)

您有一个非常奇怪的部门表-包含重复项。

无论如何,这是joingroup 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,对我来说似乎正确。