Ваш исходный запрос вычисляет повторяющиеся значения суммы.
Я думаю, вы можете понять, как добавить столбец count(1)
к вашему исходному запросу.
Ниже приведен мой вывод.
mysql> SELECT student.roll, count(1) as count
-> FROM student
-> LEFT JOIN discount on student.roll = discount.roll
-> LEFT JOIN fee on fee.roll = student.roll
-> LEFT JOIN pdc on pdc.roll = student.roll
-> GROUP BY student.roll
-> ;
+-------+-------+
| roll | count |
+-------+-------+
| 22222 | 12 |
| 33333 | 1 |
+-------+-------+
2 rows in set (0.00 sec)
Исходя из этого, пожалуйста, запустите, как показано ниже sql.
Я думаю, что есть улучшения на этом sql, но я получил ожидаемые результаты на данный момент.
Также 26000 в общей колонкея не прав в выводе, и 26500, я думаю, прав.
SELECT
student.roll,
final,
SUM(discount.gst_amount) AS total,
SUM(fee.amount) AS fee,
SUM(pdc.amount) AS pdc
FROM
student
LEFT JOIN
(SELECT
roll, SUM(gst_amount) AS gst_amount
FROM
discount
GROUP BY roll) AS discount ON discount.roll = student.roll
LEFT JOIN
(SELECT
roll, SUM(amount) AS amount
FROM
fee
GROUP BY roll) AS fee ON fee.roll = student.roll
LEFT JOIN
(SELECT
roll, SUM(amount) AS amount
FROM
pdc
GROUP BY roll) AS pdc ON pdc.roll = student.roll
GROUP BY student.roll