I am trying to build a complex MySQL query, but it returns incorrect results ...
SELECT b.name AS batch_name, b.id AS batch_id, COUNT(DISTINCT s.id) AS total_students, COALESCE( SUM(s.open_bal), 0 ) AS open_balance, SUM( COALESCE(i.reg_fee, 0) + COALESCE(i.tut_fee, 0) + COALESCE(i.other_fee, 0) ) AS gross_fee, SUM( COALESCE(i.discount, 0) ) AS discount, COALESCE( SUM(s.open_bal), 0 ) + SUM( COALESCE(i.reg_fee, 0) + COALESCE(i.tut_fee, 0) + COALESCE(i.other_fee, 0) ) - SUM( COALESCE(i.discount, 0) ) AS net_payable, SUM( COALESCE(r.reg_fee, 0) + COALESCE(r.tut_fee, 0) + COALESCE(r.other_fee, 0) ) AS net_recieved, ( COALESCE( SUM(s.open_bal), 0 ) + SUM( COALESCE(i.reg_fee, 0) + COALESCE(i.tut_fee, 0) + COALESCE(i.other_fee, 0) ) - SUM( COALESCE(i.discount, 0) ) ) - ( SUM( COALESCE(r.reg_fee, 0) + COALESCE(r.tut_fee, 0) + COALESCE(r.other_fee, 0) ) ) AS balance_due FROM batches b LEFT JOIN students s ON s.batch = b.id LEFT JOIN invoices i ON i.student_id = s.id LEFT JOIN recipts r ON r.student_id = s.id WHERE s.inactive = 0 GROUP BY b.name, b.id;
It returns the following results ...
| batch_name | total_students | open_bal | gross_fee | discount | net_payable | net_recieved | due_balance | +------------+-----------------+----------+-----------+----------+-------------+--------------+-------------+ | MS | 6 | 10000 | 0 | 0 | 10000 | 101000 | -91000 | +------------+-----------------+----------+-----------+----------+-------------+--------------+-------------+
batch table
| id | name | +-----+------+ | 9 | Ms | +-----+------+
Student's table
| id | open_bal | batch | inactive | +-----+----------+-------+----------+ | 44 | -16000 | 9 | 0 | +-----+----------+-------+----------+ | 182 | 9000 | 9 | 0 | +-----+----------+-------+----------+ | 184 | -36000 | 9 | 0 | +-----+----------+-------+----------+ | 185 | 19000 | 9 | 0 | +-----+----------+-------+----------+ | 186 | 9000 | 9 | 0 | +-----+----------+-------+----------+ | 187 | 4000 | 9 | 0 | +-----+----------+-------+----------+
Billing Chart
| id | student_id | reg_fee | tut_fee | other_fee | net_payable | discount | +------+------------+---------+---------+-----------+-------------+----------+ | | | | | | | | +------+------------+---------+---------+-----------+-------------+----------+
For the above student, accounts are not available.
Recipe Table
| id | student_id | reg_fee | tut_fee | other_fee | status | +------+------------+---------+---------+-----------+------------+ | 8 | 44 | 0 | 0 | 1500 | confirmed | +------+------------+---------+---------+-----------+------------+ | 277 | 44 | 0 | 50000 | 0 | confirmed | +------+------------+---------+---------+-----------+------------+ | 26 | 182 | 0 | 0 | 1500 | confirmed | +------+------------+---------+---------+-----------+------------+ | 424 | 182 | 0 | 15000 | 0 | confirmed | +------+------------+---------+---------+-----------+------------+ | 468 | 182 | 0 | 15000 | 0 | confirmed | +------+------------+---------+---------+-----------+------------+ | 36 | 185 | 0 | 0 | 1500 | confirmed | +------+------------+---------+---------+-----------+------------+ | 697 | 185 | 0 | 15000 | 0 | confirmed | +------+------------+---------+---------+-----------+------------+ | 66 | 187 | 0 | 0 | 1500 | confirmed | +------+------------+---------+---------+-----------+------------+
Expected results using the above SQL query and tables ...
| batch_name | total_students | open_bal | gross_fee | discount | net_payable | net_recieved | due_balance | +------------+-----------------+----------+-----------+----------+-------------+--------------+-------------+ | MS | 6 | -11000 | 0 | 0 | 10000 | 101000 | -112000 | +------------+-----------------+----------+-----------+----------+-------------+--------------+-------------+