2014-02-05 15 views
0

我有上課了一堆成績表,在用戶通過用戶基礎SQL:需要另一個表來獲得從一個表,然後除以MAX值按行的總數

------------------------ 
|uid |lesson_id |score | 
------------------------ 
|1 |0   |20 | 
|1 |0   |25 | 
|1 |0   |15 | 
|1 |0   |40 | 
|1 |1   |70 | 
|1 |0   |10 | 
|1 |1   |20 | 
|1 |1   |55 | 
|1 |1   |55 | 
|1 |0   |5  | 
|1 |2   |65 | 
------------------------ 

我也有所有可能的教訓表可以砍下:

------------ 
|lesson_id | 
------------ 
|0   | 
|1   | 
|2   | 
|3   | 
|4   | 
|5   | 
------------ 

我需要計算在從第一表格中的分數第二個表中的每一課的最高得分,並利用這一平均在第二個表中的課程數量:

所以,最大得分的得分表是(用於用戶1):

----------------------- 
|lesson_id |max_score | 
----------------------- 
|0   |40  | 
|1   |70  | 
|2   |65  | 
----------------------- 

我需要它們求和:通過吸取總數表175和除法2:6,其應該給回答29.16

任何想法如何在單個語句中做到這一點?

我可以得到的分數表(用戶1)所有的MAX值的平均值,像這樣:

SELECT AVG(max_score) AS avg_max_score FROM 
(
    SELECT uid, lesson_id, MAX(score) AS max_score FROM cdu_user_progress 
    AND uid =1 
    GROUP BY lesson_id 
) AS m 

回答

0
SELECT 
    AVG(max_score) 
FROM 
    (

    SELECT 
     lesson.lesson_id, 
     max(isNull(score,0)) as max_score 
    FROM 
     lesson 
    LEFT JOIN 
     cdu_user_progress 
    ON 
     lesson.lesson_id = cdu_user_progress.lesson_id 
    GROUP BY 
     lesson.lesson_id 
    ) AS m 
+0

如何調整這個所以它提取由用戶基礎上用戶(表1中的uid)? – user3241112

+0

@ user3241112,只需添加到外部選擇用戶ID併爲此添加一個組...另外,將用戶ID添加到內部預查詢和按用戶添加到現有課程ID的組中。 – DRapp

+0

你有一張桌子可以容納用戶嗎?你需要引用它,否則你最終會崩潰左連接。 – Aheho

相關問題