我對 SQL 很陌生(目前在 R 中使用它與 RSQLite 和 DBI 包)
我正在嘗試創建一個絕對平均偏差的列,即:
(i) - 平均 (i,g)
其中 i 是個體發生率,AVG 分量是組的平均值。我遇到的麻煩是確保 AVG 組件是唯一被分組的部分。當我執行 GROUP BY 時,它會將所有內容分組,并且不會給我正確的數字。
這是示例資料:
| 學生 | 班級 | 年級 |
|---|---|---|
| 一個 | 英語 | 79 |
| 一個 | 西班牙語 | 65 |
| 一個 | 化學 | 92 |
| 乙 | 英語 | 46 |
| 乙 | 西班牙語 | 83 |
| 乙 | 化學 | 78 |
| C | 英語 | 67 |
| C | 西班牙語 | 87 |
| C | 化學 | 98 |
| D | 英語 | 99 |
| D | 西班牙語 | 80 |
| D | 化學 | 75 |
基本上我希望班級學生的個人成績與該學生的平均成績進行比較(例如個人英語成績 - 學生的總平均成績)
我已經嘗試了以下方法:
dbGetQuery(gradesdb, "SELECT student,
ABS(grade-AVG(grade)) AS mad
FROM grades
GROUP BY student,class")
這給了我所有統計值的 0 (我收集是因為 group by 正在查詢中的所有選定操作)
我怎樣才能使計算的 AVG 部分僅由學生“分組”。如果我這樣做,我會得到正確的計算:
dbGetQuery(gradesdb2, "SELECT student,
ABS(grade-AVG(grade)) AS mad
FROM grades
GROUP BY student")
但是后來我只得到每個學生的第一堂課,而不是每個班級的學生平均資料。
我想在 SQL 中完成這一切,而不是將平均值計算為具有基數 R 或 tidyverse 的單獨列。
非常感謝你的幫助!
uj5u.com熱心網友回復:
考慮將AVG()通過GROUPBY以AVG()通過窗函式:
SELECT student,
ABS(grade - AVG(grade) OVER (PARTITION BY student)) AS mad
FROM grades
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406872.html
標籤:
