我想显示每个城镇的平均雇员数。镇可以有
这是我的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。
最佳答案
看来您的问题是您没有在员工数子查询中按商店对数据进行分组,因此该查询返回的是每个城镇的员工总数。另外,您无需在该子查询中按城镇分组。没有完整的表结构和示例数据,很难确定,但是我认为这是您真正想要的:
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
关于mysql - AVG()函数显示的是所有员工的平均人数,而不是每个商店中每个城镇的员工平均人数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55612462/