作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 MySQL 比较陌生,并且尝试自学如何使用它,如果我没有使用正确的术语,我很抱歉......
我有 2 个表:学生和付款付款表包含学生 ID、金额和类型(债券、分期付款或维修)
我无法弄清楚如何获得一个列用于显示所有债券付款的总和,另一个列用于显示每个学生的所有分期付款的总和,并显示所有已付款或未付款的学生。
或者,如果您知道任何可以提供帮助的免费好指南(我的预算是 0 美元),我们将不胜感激。谢谢
最佳答案
由于您想要所有学生
,即使他们在付款
中没有任何匹配项,您也必须使用LEFT JOIN
。
select students.*, payments.type, SUM(payments.amount)
from students
left join payments on payments.student_id = students.id
group by students.id, payments.type
请注意,这会将不同的付款类型放在各自的行中。将它们转换为结果中的列称为旋转。一些数据库系统有内置的方法来执行此操作,但 MySQL 没有。这样做需要了解 payment.type
的所有可能值。
select students.*,
SUM(IF(payments.type = 'Bond', payments.amount, 0)) Bond,
SUM(IF(payments.type = 'Installment', payments.amount, 0)) Installment,
SUM(IF(payments.type = 'Repair', payments.amount, 0)) Repair
from students
left join payments on payments.student_id = students.id
group by students.id
关于MySQL 查询 : How to join and group and I don't know what they're called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873509/
我是一名优秀的程序员,十分优秀!