多列的平均值,不涉及数据

时间:2016-07-07 03:46:33

标签: mysql

我从下面的表score获得了这些数据:

No   !  id   !  A      !  B    ! average  !
------------------------------------------
1    !  01   !  80     !  60   !    70    !
2    !  02   !         !  60   !    30    !
3    !  03   !  0      !  60   !    30    !
4    !  04   !  80     !       !    40    !

我想使用以下代码获得A列和B列的平均值:

Select id, (avg(A)+avg(B))/2 as Average
from score
Group by id;

问题是,id 02id 04只有一个数据。平均值将其计为0而不是无数据。

我想要的表是这样的 我从下面的表score获得了这些数据:

No   !  id   !  A      !  B    ! average  !
------------------------------------------
1    !  01   !  80     !  60   !    70    !
2    !  02   !         !  60   !    60    !
3    !  03   !  0      !  60   !    30    !
4    !  04   !  80     !       !    80    !

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

尝试此查询:

SELECT id, (SUM(COALESCE(A,0)) + SUM(COALESCE(B,0))) / (COUNT(A) + COUNT(B))
FROM score
GROUP by id

这里的技巧是通过将SUM除以COUNT并使用COALESCE()来适当处理NULL值来计算平均值。请记住,默认情况下,MySQL聚合函数(SUMCOUNT等)忽略 NULL值。

我测试了该查询,您可以在AB之外添加其他列,但它似乎仍在运行。

<强>演示:

SQLFiddle

答案 1 :(得分:0)

您不能在整数字段中使用浮点平均值。不幸的是,平均值会给出整数结果,因此0和1的平均值将为0.已经说过,你的平均值是#34;保证至少与列中的 MIN()值一样大,并且不大于列中的 MAX()值。如果您希望在与整数相同的列中报告浮点数,那么不要将其作为整数列!