mysql - 获取mysql中选定值的平均值

标签 mysql

我有一个表结构

 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/

相关文章:

mysql - 查询以查找两条记录之间的差异

sql - 将相对周数列添加到 MySQl 结果

php - MySql select from 3 tables Undefined index 错误

mysql - 从 MySQL 中当前行上方的行中减去值

php 最小和最大变量在 mysql 语句中不起作用

mysql - C MySQL API 编译器在包含头文件时重新定义时出现警告问题

php - 循环遍历 MYSQL 查询的结果并将其插入表中

mysql - 如何从 MySQL 表中的两个不同列中获取总和

mysql - 如果您尝试更新正在查询的表,MySQL 会做什么?

php - 可能有包含 2 个唯一列的 Mysql 表