2013-10-01 45 views
0

我可能錯過了一些非常明顯的東西,但我無法讓我的RIGHT JOIN在我的SQL語句中正常工作。SQL RIGHT JOIN不工作

我有下面的表:

ID,爲test_id,得分,類標識碼,rec_date

我希望得到每個類的每個測試,這是爲test_id確定的平均分數。我有以下SQL語句:

SELECT c.class_id, 
    ROUND(AVG(CASE WHEN s.test_id=1 THEN s.score END),1) AS test1, 
    ROUND(AVG(CASE WHEN s.test_id=2 THEN s.score END),1) AS test2, 
    ROUND(AVG(CASE WHEN s.test_id=3 THEN s.score END),1) AS test3 
FROM scores s 
RIGHT JOIN classes c ON s.class_id=c.class_id 
GROUP BY c.class_id 

我想產生空值,即使沒有得分的一類,但這種說法只對一類產生的數據時,不存在一個或多個分數測試。我相信我的問題可能在於我用CASE算子計算AVG的方式。

+0

您是否嘗試過反轉('LEFT OUTER JOIN')? –

+0

您是否嘗試過顛倒表格的順序並使用LEFT JOIN? –

+2

你的查詢絕對沒有錯。它的工作原理,我測試了它。如何查看您的數據? –

回答

0

您正在聚合不同的行集合,因此您必須在SELECT部分中使用子查詢。像這樣:

SELECT c.class_id, 
    ROUND(AVG(SELECT s.score 
      FROM scores s 
      WHERE s.test_id = 1 
       AND s.class_id = c.class_id)) AS test1, 
    ROUND(AVG(SELECT s.score 
      FROM scores s 
      WHERE s.test_id = 2 
       AND s.class_id = c.class_id)) AS test2, 
    ROUND(AVG(SELECT s.score 
      FROM scores s 
      WHERE s.test_id = 3 
       AND s.class_id = c.class_id)) AS test3 
FROM classes c