我想计算每行总和的平均值,但没有成功。 另外,我请你帮我。
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
)
答案 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;