我想显示每个城镇的平均雇员数。城镇可以拥有
这是我的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。
答案 0 :(得分:0)
您的问题似乎是您没有在员工数子查询中按商店对数据进行分组,因此该查询返回的是每个城镇的员工总数。另外,您无需在该子查询中按城镇分组。没有完整的表结构和示例数据,很难确定,但是我认为这是您真正想要的:
SELECT s.Name as `Town Name`, AVG(se.cnt) AS `AVG employees per shop`
FROM Shops s
JOIN (SELECT ShopId, COUNT(*) AS cnt
FROM `Shops and Employees`
GROUP BY ShopId) se ON se.ShopId = s.ShopId
GROUP BY s.Name