我試圖解決使用AVG的問題,我找到了一些類似/相關的解決方案,並試圖將其應用於我的查詢,但是仍然無法獲得正確的解決方案。獲取MySQL中每個單元的出勤平均數
這裏是我的查詢:
SELECT unt_id, sum(enteredCode)/count(DISTINCT unt_id) AS 'avg' FROM tbl_code GROUP BY unt_id
凡enteredCode有1 unt_id值可能是化學,物理等
我想我失去了一些東西,因爲它只能說明總和不平均。
我試圖解決使用AVG的問題,我找到了一些類似/相關的解決方案,並試圖將其應用於我的查詢,但是仍然無法獲得正確的解決方案。獲取MySQL中每個單元的出勤平均數
這裏是我的查詢:
SELECT unt_id, sum(enteredCode)/count(DISTINCT unt_id) AS 'avg' FROM tbl_code GROUP BY unt_id
凡enteredCode有1 unt_id值可能是化學,物理等
我想我失去了一些東西,因爲它只能說明總和不平均。
你應該只使用AVG功能:GROUP BY的
Select unt_id, avg(enteredCode) from tbl_code group by unt_id
嘗試思維服用一大堆行,並把它們變成小堆,其中每個小堆被等同於在所有的唯一值組。
在您的查詢:
SELECT unt_id
, sum(enteredCode)/count(DISTINCT unt_id) AS 'avg'
FROM tbl_code
GROUP BY unt_id
你問到有沒有被unt_id分組的所有行,如果unt_id有6倍1,3,9,12,18,24(橫跨但是許多行不同的值在表中有),你將有6個組,其中第一組由所有行中的unt_id = 1組成,第二組中所有行都有unt_id = 2,等等。
現在呢?像SUM(),COUNT(),AVG(),MAX(),MIN()這樣的組函數將查看單個行組,併爲每個組提供一個結果。回到你的查詢,請求COUNT(DISTINCT unt_id),例如unt_id = 3的組,你將得到1;數據庫將unt_id = 3的所有行放在該組中,因此只有一個不同的unt_id值。第1組,第9組,第12組,第18組和第24組同樣如此;他們的小組中也只有一個不同的unt_id。 (順便說一句,請注意使用該分組,MAX(unt_id)= MIN(unt_id)= unt_id爲每個組)。
如果你只是考慮:你會得到一個返回行
SELECT unt_id
, count(DISTINCT unt_id) as dist_count
FROM tbl_code
GROUP BY unt_id
對於數據中的每個唯一的unt_id值,dist_count將爲每個值爲1。在你自己的平均計算中使用這個計數(SUM(enteredCode)/ COUNT(DISTINCT unt_id))你基本上只是在做SUM(enteredCode)/ 1,所以你只能看到總和。
當你說「enteredCode的值爲1」時,它聽起來像1是唯一的值,如果是這種情況,那麼平均值並不會令人興奮 - 它也只會是1 。假設enteredCode具有其他值,如@bitfiddler所說,您可以使用AVG函數並將其調用完成,前提是您要查找每個unt_id組中所有行的平均inputsCode。 (如果你想對平均值使用明確的SUM/COUNT計算,只需記住AVG()= SUM()/ COUNT(),而其中爲空的行將不被考慮)。
希望這可以提供一些見解至於爲什麼你沒有得到你想要的結果。
謝謝!我已經嘗試了很多次,完全有效。我想,在閱讀@Patrick Marchand的解釋之後,我現在將解決關於輸入代碼的價值的問題。 – Avery