我想显示每个城镇的平均雇员数。镇可以有

这是我的data_base

mysql - AVG()函数显示的是所有员工的平均人数,而不是每个商店中每个城镇的员工平均人数-LMLPHP

为了明确起见,假设雇主是兼职人员,因此可能存在一种情况,当他们出于行使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/

10-12 21:46