0

本当に明らかな何かが欠けている可能性がありますが、SQL ステートメントで RIGHT JOIN を正しく機能させることができません。

次の列を持つテーブルがあります。

id、test_id、スコア、class_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

クラスにスコアがない場合でも null 値を生成したいのですが、このステートメントは、1 つ以上のテストにスコアが存在する場合にのみクラスのデータを生成します。私の問題は、CASE 演算子を使用して AVG を計算する方法のどこかにあると思います。

4

1 に答える 1

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
于 2013-10-01T11:44:20.750 に答える