Mysql 从一个表中选择所有行,并根据第三个表从第二个表中选择总和
我在创建一个查询时遇到问题,该查询将显示一个表中的所有行以及另一个表中具有相同id的行的总和 我编写了一个无效的查询,因为它跳过了空行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; 我还尝试了左连接,但我的查询有错误:
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;