【问题标题】:MySQL query sum result divide by number of row (Average)MySQL查询总和结果除以行数(平均)
【发布时间】:2015-06-05 17:00:03
【问题描述】:

我在MySQL 中有以下数据,我想求和(总计),然后除以行数。

例子:

我想将 AcctSessionTime 列中的所有数字相加,然后除以项目数,因此在我们的例子中,6+4+3+31=44 将它们除以 4 行数。

如何制作查询以在单个查询中完成所有操作?

mysql> select AcctStartTime,AcctStopTime,AcctSessionTime 
       from radacct 
       where UserName='spatel' AND SipResponseCode='200';
+---------------------+---------------------+-----------------+
| AcctStartTime       | AcctStopTime        | AcctSessionTime |
+---------------------+---------------------+-----------------+
| 2015-06-04 15:32:03 | 2015-06-04 15:32:09 |               6 |
| 2015-06-04 16:11:27 | 2015-06-04 16:11:31 |               4 |
| 2015-06-04 16:13:37 | 2015-06-04 16:13:40 |               3 |
| 2015-06-05 11:44:31 | 2015-06-05 11:45:02 |              31 |
+---------------------+---------------------+-----------------+
4 rows in set (0.00 sec)

注意:以上是示例数据,我们有数千行的实际数据。

【问题讨论】:

    标签: mysql sql linux syntax


    【解决方案1】:

    SUM(RowData) / #Rows 的计算是 RowData 的平均值 - 这已经作为 AVG 聚合函数本机支持:

    select AVG(AcctSessionTime) 
    from radacct 
    where UserName='spatel' AND SipResponseCode='200';
    

    如果需要,您还可以使用 GROUP BY 语句进行分组平均

    【讨论】:

    • 哇!那太简单了!!!是时候学习SQL了。但是你们太有帮助了,所以从来没有尝试打开书:(
    • 嗯,拥有 4.5k 代表,您已经知道当您在卡住之前展示您尝试过的东西时,SO 是多么欣赏它。
    • 我从Linux OS 获得所有代表,很少使用 SQL,有时只是在这里 ping 并获得答案,所以从不费心学习!!..
    • 当我读到我开始分组的问题时,这是我脑海中的经验,总结列并除以计数等...... :) 赞成,因为我知道我需要更仔细地阅读文档它可以让生活更轻松...... GL
    【解决方案2】:
    mysql> select sum(AcctSessionTime) div count(AcctSessionTime) as result from radacct where UserName='spatel' AND SipResponseCode='200';
    
    | result |
    +--------+
    |     11 |
    

    你可以试试这个。

    【讨论】:

    • 你的例子很有效,当你必须除以一个计数(不同的东西)时,例如,你的例子很好,否则通常的 avg 会做到这一点。您可以使用“/”运算符代替 DIV,因为 DIV 会截断。同样ROUND 会很好,并且可能需要NULLIF 来防止被零除。所以查询会变成SELECT ROUND(SUM(AcctSessionTime) / NULLIF(COUNT(AcctSessionTime), 0), 2) AS result FROM radacct WHERE UserName='spatel' AND SipResponseCode='200';
    【解决方案3】:

    你可以试试这个:

    Select AVG(AcctSessionTime) from radacct where UserName='spatel' AND SipResponseCode='200';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      相关资源
      最近更新 更多