我有一个表结构
id group name points
1 1 a 10
2 1 b 9
3 2 c 7
等等..
我正在编写一个查询,它为我提供了一个名称数组和所有选定行的点的平均值,其中 group
匹配值
对于 group_list = [1] 想要这样的结果 [name: ['a','b'], median:[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 个不同的需求组合到一个 sql 语句中,这会导致问题。
点的平均值是每组或每条记录的单个值,而名称是一个列表。您可以通过重复名称的平均值将这 2 个组合成一个查询,但是,它只会产生开销。
我会简单地运行一个查询来获取用户名列表,并运行一个单独的查询来获取平均分(按组分组或跨所有组分组,这在问题中并不清楚)。
这个解决方案非常简单,我认为我不需要提供任何代码。
或者,您可以使用 MySQL 的 group_concat()函数以逗号分隔列表中的单个值获取每个组的名称列表(您可以使用任何其他分隔符代替逗号)。在这种情况下,将两者组合在一个查询中更值得:
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`
关于mysql - 获取mysql中选定值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39225815/