MySQL双重平均与双重分组

时间:2017-10-20 13:42:22

标签: mysql

我在名为test

的MySQL表中有以下数据

enter image description here

我运行以下SQL查询

SELECT user_id, 
       group_id, 
       sum(value) as total_present, 
       avg(value)*100 as attendance_percentage 
FROM test t 
WHERE t.session_date BETWEEN '2017-10-01' AND '2017-10-15'
GROUP BY user_id

这为我提供了每个user_id的百分比,如下所示:

enter image description here

如果查看上面的输出示例,user_id 1和2位于同一group_id中。那么有没有办法让我进一步将我的查询分组,然后取平均值相同的group_id' s。因此,对于上面的示例,group_id 3百分比应为70.83335

2 个答案:

答案 0 :(得分:1)

哈立德回答没问题。但是我认为你应该考虑你在不同程度上平均不同事物的问题。 user_id = 2的值多于user_id = 1,因此他的百分比应该更重。

例如,如果user_id = 3只进行一次100%的出勤率会扭曲平均值。

你应该这样做:

 SELECT group_id, avg(value)
 FROM yourTable
 GROUP BY group_id

在这种情况下,AVG()是71.42而不是70.83

答案 1 :(得分:0)

您可以在查询中应用进一步的聚合

SELECT t.group_id, avg(t.attendance_percentage) as t.group_attendance_percentage 
FROM(
    SELECT user_id, group_id, sum(value) as total_present, avg(value)*100 as attendance_percentage 
    FROM test t 
    WHERE t.session_date BETWEEN '2017-10-01' AND '2017-10-15'
    GROUP BY user_id
) t
GROUP BY t.group_id
相关问题