Получение значений из таблицы 2 с использованием таблицы 1 - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть две таблицы отдел и работа;значения выглядят следующим образом

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 (рабочая таблица), взять все проценты для каждого имени dept (из таблицы dept) и сопоставить в рабочей таблице, если существует счетчик отображений (количество deptids, присутствующих в работе).table) и avgsal else 0 для count и avgsal все имена dept в том же порядке, что и в таблице dept.Вывод должен быть таким:

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 голосов
/ 23 февраля 2019

У вас очень странная таблица отделов, содержащая дубликаты.

В любом случае, это 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) ());

Здесь - это db <> скрипка.

Обратите внимание, что это возвращает среднюю зарплату как среднюю по всему населению.Обычно это то, что вы хотите.Значение 1750, что выглядит правильно для меня.

...