#mysql
#mysql
Вопрос:
Я использую следующий запрос для получения отчета из другой таблицы моей базы данных, проверьте следующее…
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 students 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;
Счета-фактуры
| id | student_id | amount | discount | dnt |
---- ------------ ---------- ---------- -------------
| 2 | 22 | 35000 | 0 | 2011/01/01 |
---- ------------ ---------- ---------- -------------
Не удается получить правильное значение от gross_fee и net_payable.
Спасибо.
Комментарии:
1. не могли бы вы изменить мой код своим, пожалуйста?
2. попробуйте изменить
INNER
наLEFT
join и поделиться результатом3. @Teneff проверьте вопрос еще раз, пожалуйста.
Ответ №1:
Учитывая SUM
s в select, я полагаю, что это GROUP BY s.id
должно сработать. В любом случае, GROUP BY
кажется, что отсутствует 🙂
SELECT s.id, s.name, c.name AS course_name,
s.open_bal AS open_balance,
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 students 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;
Редактировать
Отдельный запрос, позволяющий получить gross_fee и net_payable для всех счетов-фактур
SELECT sum(amount) AS gross_fee,
sum(discount) AS discount,
sum(amount) - sum(discount) AS net_payable,
FROM invoices;
Комментарии:
1. спасибо за ваши ответы и, верно, я пропустил GROUP By, не могли бы вы еще раз проверить код, чтобы увидеть, делаю ли я какую-либо ошибку, или я могу оптимизировать этот код.
2. @Frosty Z даже выдает мне неверное значение gross_fee и net_payable.
3.Для меня выглядит нормально. Однако довольно много сумм. Если у вас возникнут проблемы с perf
GROUP BY
, вот несколько интересных чтений: dev.mysql.com/tech-resources/articles /… dev.mysql.com/doc/refman/5.0/en/group-by-optimization.html4. Что касается «неправильных значений», пожалуйста, отредактируйте свой вопрос и точно объясните, чего вы ожидаете от этих значений (например, gross_fee для каждого студента или для каждого курса?)
5. Мне нужна общая плата за студента, и я думаю, вы получили мой расчет из приведенного кода. проверьте мою таблицу счетов, о которой идет речь
Ответ №2:
Получили ли обе записи студентов значение для s.course_id?
У вас есть внутреннее объединение студентов с курсами…
Курсы ВНУТРЕННЕГО СОЕДИНЕНИЯ c на c.id = s.course_id
Если s.course_id равен нулю в одной из записей student, запрос вернет только одну строку.