MySQL-如何将AVG ON SUM?

时间:2019-01-17 11:23:16

标签: mysql group-by aggregate-functions

我想计算每行总和的平均值,但没有成功。 另外,我请你帮我。

id   sessionId   duration
1    5           10
2    5           12
3    14          5
4    14          5
5    21          7
6    21          12

结果:

sessionId    sum
5            22
14           10
21           19

第二个结果总和:

  22+10+19 = 51

平均

51/3 = 17

这是我的SQL:

SELECT `SessionID`
     , SUM(`Duration (s)`) AS SOMME_total 
     , SEC_TO_TIME(SUM(`Duration (s)`)) AS SOMME_HEURE 
  FROM 
     ( SELECT SUM(i2.`Duration (s)`) AS SOMME_ROW 
         FROM issueNubitalk i2 
        WHERE i2.Campaign LIKE 'Canal%' 
        GROUP 
           BY i2.SessionID
     )

4 个答案:

答案 0 :(得分:2)

您可以将SUM除以不同的COUNT

SELECT SUM(duration) / COUNT(DISTINCT sessionId)
FROM t

答案 1 :(得分:1)

使用子查询:

SELECT AVG(duration)
FROM
(
    SELECT SUM(duration) AS duration
    FROM issueNubitalk
    GROUP BY sessionId
) t;

我正在使用示例数据中的列名,这些列名似乎并不完全符合您的查询。但是无论如何,以上答案可能对以后的读者更有益。

答案 2 :(得分:1)

您可以计算结果的平均值

select avg(T.SOMME_total) 
from (
  SELECT `SessionID`
    , SUM(`Duration (s)`) AS SOMME_total 
    , SEC_TO_TIME(SUM(`Duration (s)`)) AS SOMME_HEURE 
  FROM FROM issueNubitalk i2 
      WHERE i2.`Campaign` 
      LIKE 'Canal%' 
  GROUP by i2.`SessionID`
) T

答案 3 :(得分:1)

您可以使用下面的查询来获取结果,因为它需要用PostgreSQL编写,并且可以轻松地将其转换为MYSQL。

SELECT
  average_value.totalSum/average_value.totalCount AS averageValue
FROM
(
  SELECT
   count(*) as totalCount,
   sum(total_value.sum) as totalSum
  FROM (
     SELECT
       i2.SessionID,
       sum(i2.Duration) as sum
     FROM issueNubitalk i2
     WHERE
      i2.`Campaign` LIKE 'Canal%' 
     GROUP BY i2.SessionID
  ) total_value
  ) average_value;