Mysql 从一个表中选择所有行,并根据第三个表从第二个表中选择总和

Mysql 从一个表中选择所有行,并根据第三个表从第二个表中选择总和,mysql,sql,Mysql,Sql,我在创建一个查询时遇到问题,该查询将显示一个表中的所有行以及另一个表中具有相同id的行的总和 我编写了一个无效的查询,因为它跳过了空行 SELECT g.name, sum(w.points), sum(w.points2) FROM groups g, works w, students s WHERE g.group_id=s.group_id AND w.student_id=s.student_id GROUP BY g.group_id; 我还尝试了左连接,但我的查询有错误:

我在创建一个查询时遇到问题,该查询将显示一个表中的所有行以及另一个表中具有相同id的行的总和

我编写了一个无效的查询,因为它跳过了空行

SELECT g.name, sum(w.points), sum(w.points2) 
FROM groups g, works w, students s 
WHERE g.group_id=s.group_id AND w.student_id=s.student_id 
GROUP BY g.group_id;
我还尝试了左连接,但我的查询有错误:

SELECT g.name, s.name, sum(w.points) points
FROM groups g 
    LEFT JOIN students s 
    ON s.group_id=g.group_id
    LEFT JOIN works w
    ON w.student_id=s.student_id
GROUP BY g.group_id;

如果组中没有点,它根本不会显示它,我希望显示所有组,即使总和为0。
示例表
预期结果

这在以下情况下有效:

如果需要零,请使用
COALESCE()

这在以下情况下有效:

如果需要零,请使用
COALESCE()

这也应该起作用


这也应该有效

请发布(至少)完整查询(带有SELECT子句)+错误消息+预期结果。但是-您的查询错误是由
s.name
引起的。现在它的工作请发布(至少)完整查询(带有SELECT子句)+错误消息+预期结果。但是-您的查询错误是由
s.name
引起的。现在它的作品
0
不是必需的,我可以得到
NULL
你已经发布了原始的db fiddle链接。您需要在进行更改后单击“Fork”。如果没有第二个
左连接,它将不起作用,但在完成更改后效果良好all@MichałB。这很奇怪。我在dbfiddle中运行它,因此
左连接就在那里。但我忘了用叉子叉。在任何情况下,链接和代码现在都应该是准确的。
0
不是必需的,我可以得到
NULL
您已经发布了原始db fiddle链接。您需要在进行更改后单击“Fork”。如果没有第二个
左连接,它将不起作用,但在完成更改后效果良好all@MichałB。这很奇怪。我在dbfiddle中运行它,因此
左连接就在那里。但我忘了用叉子叉。无论如何,链接和代码现在应该是准确的。
SELECT g.name, sum(w.points), sum(w.points2)
FROM groups g LEFT JOIN
     students s
     ON g.group_id = s.group_id LEFT JOIN
     works w
     ON w.student_id = s.student_id
GROUP BY g.group_id;
SELECT g.name, COALESCE(sum(w.points), 0),
       COALESCE(sum(w.points2), 0)
FROM groups g LEFT JOIN
     students s
     ON g.group_id = s.group_id LEFT JOIN
     works w
     ON w.student_id = s.student_id
GROUP BY g.group_id;
select subtable.name, sum(subtable.points),sum(subtable.points2) from
      (select gr.name,wr.points,wr.points2 from students as st 
       inner join works as wr on st.student_id = wr.student_id
       inner join groups as gr on gr.group_id = st.group_id) subtable
       group by subtable.name;