获取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
。