mysql - mysql INNER JOIN 上的值错误

标签 mysql left-join inner-join

我在 gfee 和 netpay 上得到的值错误。

SELECT s.id, s.name, c.name AS course_name,
s.open_bal AS open_balance, sum(i.amount) AS gross_fee,
sum(i.discount) AS discount, sum(i.amount) - sum(i.discount) AS net_payable,
SUM(r.reg_fee+r.tut_fee+r.other_fee) AS net_recieved,
(sum(i.amount) - sum(i.discount)) - SUM(r.reg_fee+r.tut_fee+r.other_fee) AS balance_due
FROM subscribers s
INNER JOIN courses c on c.id = s.course_id
LEFT JOIN invoices i on i.student_id = s.id
LEFT JOIN recipts r on r.student_id = s.id
GROUP BY s.id;

为什么会发生这种情况?

最佳答案

SELECT s.id
     , s.name
     , c.name AS course_name
     , s.open_bal AS open_balance
     , igroup.gross_fee
     , igroup.discount
     , igroup.net_payableinvoices
     , rgroup.net_recieved
     , igroup.net_payableinvoices - rgroup.net_recieved
       AS balance_due
FROM students s
INNER JOIN courses c
  on c.id = s.course_id
LEFT JOIN 
  ( SELECT i.student_id
         , SUM(i.amount) AS gross_fee
         , SUM(i.discount) AS discount
         , SUM(i.amount) - sum(i.discount)
           AS net_payableinvoices
    FROM invoices i
    GROUP BY i.student_id
  ) AS igroup
  ON igroup.student_id = s.id
LEFT JOIN 
  ( SELECT r.student_id
         , SUM(r.reg_fee+r.tut_fee+r.other_fee)
           AS net_recieved
    FROM recipts r 
    GROUP BY r.student_id
  ) AS rgroup
  ON rgroup.student_id = s.id
;

关于mysql - mysql INNER JOIN 上的值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650088/

相关文章:

PHP:喜欢/不喜欢计数器

php - 如何在 JOIN 语句中使用 CASE 根据条件连接两个表?

mysql - MySQL JOIN 与 LEFT JOIN 的区别

python - 有没有一种方法可以将某些值的数据从另一个表插入到一个表中?

SQL:内部联接 + 不存在

php - 使用 Ajax 和 Codeigniter 的评论系统

mysql - 如何将用户的输入传递到 INSERT 查询(MySQL)?去

php - 尝试使用 jQuery 从数据库获取信息

PostgreSQL 与子字符串比较不起作用

sql - 派生表的内部连接