我在名为test
的MySQL表中有以下数据我运行以下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的百分比,如下所示:
如果查看上面的输出示例,user_id 1和2位于同一group_id中。那么有没有办法让我进一步将我的查询分组,然后取平均值相同的group_id' s。因此,对于上面的示例,group_id 3百分比应为70.83335
答案 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