在mysql中计算COUNT()的AVERAGE

时间:2014-03-01 20:00:14

标签: mysql

我正在尝试发出以下查询:

SELECT 
  AVG(`count`)
FROM
  (SELECT 
    COUNT(s_id) AS `count`
  FROM
    instructor,
    advisor 
  WHERE instructor.ID = advisor.i_id 
    AND dept_name = 'CIS' 
  GROUP BY dept_name) nested ;

计算计算值的平均值。但是,嵌套查询返回给我一个计数值= 2的行。该值2是与查询匹配的2行记录的结果。

现在,当我将平均函数应用于它时,我得到2.0000。但是预期答案是1.0000。

知道我如何能够获得预期的价值吗?

2 个答案:

答案 0 :(得分:3)

这是您的查询:

SELECT AVG(`count`)
FROM (SELECT COUNT(s_id) AS `count`
      FROM instructor join
           advisor 
           on instructor.ID = advisor.i_id 
      WHERE dept_name = 'CIS' 
      GROUP BY dept_name
    ) nested

您正在选择一个部门名称,然后按此分组。 where子句意味着您只获得一行。因此,平均值与计数相同。一件事的平均值就是事物的价值。

如果您想要所有部门的平均值,可以删除where

SELECT AVG(`count`)
FROM (SELECT COUNT(s_id) AS `count`
      FROM instructor join
           advisor 
           on instructor.ID = advisor.i_id 
      GROUP BY dept_name
    ) nested;

或者,您实际上不需要子查询:

SELECT count(*) / count(distinct dept_name)
FROM instructor join
     advisor 
     on instructor.ID = advisor.i_id ;

答案 1 :(得分:0)

AVG(s_id)将计算平均s_id,因此如果两行的id为1和3,则结果为2.