Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取mysql中选定值的平均值_Mysql - Fatal编程技术网

获取mysql中选定值的平均值

获取mysql中选定值的平均值,mysql,Mysql,我有一个桌子结构 id group name points 1 1 a 10 2 1 b 9 3 2 c 7 等等 我正在编写一个查询,该查询为所选行提供一个名称数组和所有点的平均值,其中group与该值匹配 对于组_list=[1],希望得到如下结果[name:['a','b',中位数:[9.5]] 我试过这样做 $group_list = [1];

我有一个桌子结构

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

我正在编写一个查询,该查询为所选行提供一个名称数组和所有点的平均值,其中
group
与该值匹配

对于组_list=[1],希望得到如下结果[name:['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();

需要这方面的帮助吗

您应该通过

 ->groupBy('x.`group`')

您正在将两个不同的需求组合到一个sql语句中,这会导致问题

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

我只需要运行一个查询来获得用户名列表,然后运行一个单独的查询来获得平均分(可以按组分组,也可以跨所有组,这个问题并不清楚)

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

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

select group_concat(`name`) as names, avg(`points`) as median
from mytable
where `group` in (...)
如果需要多个组的名称,请将“组”字段添加到“选择”和“分组依据”列表中:

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

请注意,
group
对于列名称
x.AVG(points)作为中位数来说并不是一个很好的选择。这只是一个深刻的误解。平均值通常不等于中间值。您的查询中似乎缺少
GROUP BY x.GROUP