MYSQL - 如果计数超过1,则获得平均值

时间:2017-03-20 04:09:59

标签: php mysql

我有以下表格

+------+------------+--------+----------+-----------+--------------------+---------+--------------------+------+
| mrId | date_test  | c_load | c_weight | monitorId | strength           | density | str_percent        | age  |
+------+------------+--------+----------+-----------+--------------------+---------+--------------------+------+
|  853 | 2017-02-11 |    100 |     8020 |       124 |  4.444444444444445 |  2.3763 | 11.111111111111112 |    1 |
|  854 | 2017-02-13 |    305 |     7940 |       124 | 13.555555555555555 |  2.3526 |  33.88888888888889 |    3 |
|  855 | 2017-02-17 |    450 |     7910 |       124 |                 20 |  2.3437 |                 50 |    7 |
|  856 | 2017-02-17 |    460 |     8040 |       124 | 20.444444444444443 |  2.3822 |  51.11111111111111 |    7 |
|  857 | 2017-03-10 |    765 |     8020 |       124 |                 34 |  2.3763 |                 85 |   28 |
|  858 | 2017-03-10 |    735 |     8040 |       124 | 32.666666666666664 |  2.3822 |  81.66666666666667 |   28 |
+------+------------+--------+----------+-----------+--------------------+---------+--------------------+------+

我想为每个力量与年龄绘制一个折线图,但是' age'当在同一天测试超过1个样本时,列包含重复数据。

如果我只想要年龄计数大于1的平均强度,我需要使用什么查询?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用GROUP BY来计算出现多次的age值的平均强度:

SELECT age, AVG(strength) AS avg_strength
FROM yourTable
GROUP BY age

请注意,我们甚至不需要包含特殊逻辑来处理age出现多次的情况,因为单个年龄值的平均值恰好等于该单个值。

如果要保留相同数量的原始点,则可以使用子查询:

SELECT t1.age, t2.avg_strength   -- and other columns, if needed
FROM yourTable t1
INNER JOIN
(
    SELECT age, AVG(strength) AS avg_strength
    FROM yourTable
    GROUP BY age
) t2
    ON t1.age = t2.age