2017-10-20 23 views
0

MySQL的雙重平均我在一個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。因此,對於上面的例子中,GROUP_ID 3比例應爲70.83335

+0

郵政表和數據作爲文本[閱讀本(http://meta.stackoverflow.com/問題/ 285551/why-may-i-not-upload-images-code-on-so-when-asked-question/285557#285557) –

+0

請注意,group_id是您使用的qeury中的一個隨機值。 。看起來不像user_id是表中的PRIMARY KEY或UNIQUE KEY ..所以使用'SELECT user_id,group_id .... GROUP BY user_id'不是有效的ANSI GROUP BY ...讀取https:// www .psce.com/EN /博客/ 2012/05/15/MySQL的-錯誤-DO-你-U se-group-by-incorrect/ –

+0

@RaymondNijland PK是id,一個用戶出現好幾次,但在不同的日期,查詢沒問題。 –

回答

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 
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

+0

同意,如果你需要兩個然後做兩個查詢。一個按用戶分組,另一個按組分組 – Pace