Я хочу отобразить среднесписочную численность работников в каждом городе. Город может иметь
Это мой data_base
:
Для пояснения предполагается, что работодатели работают неполный рабочий день, поэтому может возникнуть ситуация, когда они в настоящее время не работают ради выполнения запросов OUTER JOIN. Их также можно назначить более чем в 1 магазине.
Я нашел способ сделать это, используя подзапрос для функции AVG. В подзапросе я буду использовать COUNT для подсчета числа сотрудников для каждого города и каждого магазина, а основной запрос получит AVG этих чисел, сгруппированных по городам. Однако, хотя логически я чувствую, что запрос должен работать, он отображает неверные данные. Ниже приведен запрос, который я создал.
SELECT s.Town, AVG(a.cnt) AS `Number of employees` FROM
(SELECT COUNT(k.EmpId) AS cnt FROM `Shops and Employees` k
INNER JOIN Shops s ON s.ShopId = k.ShopId
GROUP BY s.Town) AS a, shops s
GROUP BY s.Town
Я ожидал увидеть что-то вроде этого:
Town name | AVG of employees per town
-------------------------------------
town1 | 3
town2 | 5
town3 | 1
town4 | 4
Instead I get this:
Town name | AVG of employees per town
-------------------------------------
town1 | 2
town2 | 2
town3 | 2
town4 | 2
В основном, что я получаю, так это всех сотрудников, поделенных на количество городов. Я хочу, чтобы в среднем в каждом городе работали сотрудники, например, в town1 у меня 2 магазина. В Shop1 2 сотрудника, в то время как в shop2 4 сотрудника. Среднее значение для города1 должно быть 3.