mysql - SQL RIGHT JOIN 不起作用

标签 mysql sql case average right-join

我可能错过了一些非常明显的东西,但我无法让我的 RIGHT JOIN 在我的 SQL 语句中正常工作。

我有一个包含以下列的表格:

id、test_id、分数、class_id、rec_date

我希望获得每个类(class)每次测试的平均成绩,该平均成绩由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 的方式上。

最佳答案

您要聚合不同的行集,因此必须在 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

关于mysql - SQL RIGHT JOIN 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19112199/

相关文章:

mysql - 按字母顺序显示查询

mysql - 带有日期的唯一名称

SQL CASE LIKE 具有多种选择

sql - 从查询其他 2 个表的结果更新表

php - 最快的MYSQL结构如下?

java - 如何将mysql中的时间转换为时区特定时间

php - 我的网站需要多少个 VPS?

php - 注销在 codeigniter 中不起作用

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - 在单个 Switch Case 中包含多个变量的 "And"