AI编程助手
AI免费问答

如何在按其他列分组时获取 MySQL 中 DATETIME 列的平均值

<p>我正在使用以下查询创建并填充 MySQL 表:</p> <pre class="brush:php;toolbar:false;">SET time_zone = '+00:00'; CREATE TABLE timestamp_n_datetime ( id INT, time DATETIME, avg_time DATETIME ); INSERT INTO timestamp_n_datetime(id,time,avg_time) VALUES(&quot;1&quot;,&quot;2023-01-03 10:12:13&quot;, NULL), (&quot;1&quot;, &quot;2023-02-04 11:13:14&quot;, NULL), (&quot;2&quot;, &quot;2023-03-02 09:14:10&quot;, NULL), (&quot;2&quot;, &quot;2023-04-02 05:15:50&quot;, NULL), (&quot;1&quot;, &quot;2023-06-10 02:04:10&quot;, NULL);</pre> <p>我想用按 id 分组的“时间”列的平均值填充“avg_time”列。例如,第一行的 'id' = 1,因此 'avg_time' 列应取第一、第二和第五行的平均值,因为它们的 'id' 也是 1。</p> <p>我该如何回答这个问题?</p> <p>编辑:为了澄清,我希望将所有 DATETIME 列转换为毫秒,将它们全部相加,然后除以相加的数字。例如,对于 id=2,将它们转换为毫秒,将它们相加然后除以 2(因为有两行“id”= 2)给出 2023 年 3 月 17 日下午 5:45:00 的平均值。我想通过这种方式得到平均值。</p>
# MySQL
P粉460377540 P粉460377540 631 天前 732 次浏览

全部回复(1) 我要回复

  • P粉347804896

    P粉3478048962023-09-06 10:33:08

    使用此 UNIX_TIMESTAMP 转换为秒,然后使用 FROM_UNIXTIME 将其恢复为日期时间格式,这就是获取平均值的方法:

    select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`)))
        from timestamp_n_datetime
        group by id;

    这是填充平均值的方法:

    update timestamp_n_datetime  td
    inner join (
        select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`))) as average
        from timestamp_n_datetime
        group by id
    ) as s on s.id = td.id
    set avg_time = s.average;

    回复
    0
  • 取消 回复 发送