获取mysql中所选值的平均值

时间:2016-08-30 11:06:03

标签: mysql

我有一个表结构

 id  group name points
  1   1     a     10
  2   1     b      9
  3   2     c      7

依旧......

我正在编写一个查询,它为我提供了一系列名称,并为group匹配值的所选行的所有点提供了平均值

for group_list = [1]想要这样的结果[姓名:[' a',' b'],中位数:[9.5]]

我试过这样的

$group_list = [1];                                  
        createQueryBuilder()
        ->select('x.name as name, x.AVG(points) as median')
        ->from('myTable', 'x')
        ->where('x.group IN(:groupList)')
        ->setParameter('groupList', $group_list)
        ->getQuery()
        ->getResult();

需要一些帮助

2 个答案:

答案 0 :(得分:1)

您将2个不同的要求合并到一个sql语句中,这会导致问题。

点数的平均值是每组或每个记录的单个值,而名称是列表。您可以通过重复名称之间的平均值将2组合成单个查询,但是,它只会产生开销。

我只是运行一个查询来获取用户名列表,另一个用于获取平均点数(按组或按所有组分组,这个问题不明确。)

这个解决方案非常简单,我认为我不需要提供任何代码。

或者,您可以使用MySQL的group_concat()函数将每个组的名称列表以逗号分隔列表的单个值(您可以使用任何其他分隔符代替逗号)。在这种情况下,在单个查询中组合2更为值得:

select group_concat(`name`) as names, avg(`points`) as median
from mytable
where `group` in (...)

如果您需要来自多个组的名称,请将组字段添加到select和group by列表中:

select `group`, group_concat(`name`) as names, avg(`points`) as median
from mytable
where `group` in (...)
group by `group`

答案 1 :(得分:0)

您应该按

添加一个组
 ->groupBy('x.`group`')