【问题标题】:Calculate average time using 2 columns from separate MySQL Tables使用来自不同 MySQL 表的 2 列计算平均时间
【发布时间】:2017-04-12 22:28:04
【问题描述】:

我有两个具有相同列名的单独表,如下所示:

t1:

request_submit_time | request_complete_time
2017-04-12 13:20:23 | 2017-04-12 13:21:23
2017-04-12 13:15:54 | 2017-04-13 13:10:54

t2:

request_submit_time | request_complete_time
2017-04-13 13:21:23 | 2017-04-15 13:30:23
2017-04-14 13:15:54 | 2017-04-15 13:09:54

我知道如何使用以下方法从单个表中获取平均时间:

SELECT AVG(timestampdiff(HOUR,request_submit_time,request_complete_time)) AS average FROM tbl1;

但我不知道如何获得 2 个表中 2 列之间的平均时间。

【问题讨论】:

    标签: mysql database average


    【解决方案1】:

    使用 UNION ALL 连接两个表的结果集,然后计算:https://dev.mysql.com/doc/refman/5.7/en/union.html

    SELECT AVG(timestampdiff(HOUR,request_submit_time,request_complete_time)) AS 
    average FROM
    (
        (SELECT request_submit_time, request_complete_time FROM tbl1)
        UNION ALL
        (SELECT request_submit_time, request_complete_time FROM tbl2)
    )
    

    编辑 - mpen 是正确的。您必须使用 UNION ALL,因为 UNION 将删除重复项。谢谢mpen。

    【讨论】:

    • 我想你想要UNION ALLUNION 将进行重复数据删除,这会降低平均值。
    • 谢谢!除了必须将“AS 平均值”移到查询末尾,否则我会收到“每个派生表必须有自己的别名”错误。
    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2021-08-09
    • 2014-02-17
    • 2019-01-15
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多