mysql внутреннее соединение с группой - PullRequest
1 голос
/ 25 апреля 2011

Я использую следующий запрос, чтобы получить правильные результаты для каждой партии.Например, если я хотел бы увидеть сумму счета-фактуры за партию 2010 ...

SELECT COALESCE(sum(i.amount),0) AS amount, 
    COALESCE(sum(i.discount),0) AS discount,
    COALESCE(sum(i.amount) - sum(i.discount),0) AS netpay,
    b.name AS batch
FROM fm_batches b
    INNER JOIN fm_invoices i
    LEFT JOIN fm_students s ON i.student_id = s.id
GROUP BY b.name

и выводить следующие результаты ...

| amount | discount | netpay   | batch | 
+--------+----------+----------+-------+
| 2500   | 500      | 2000     | 2011  |
+--------+----------+----------+-------+
| 2500   | 500      | 2000     | 2010  |
+--------+----------+----------+-------+
| 2500   | 500      | 2000     | 2009  |
+--------+----------+----------+-------+
| 2500   | 500      | 2000     | 2008  |
+--------+----------+----------+-------+

Я уверен, чтоЯ делаю что-то не так в своем запросе, поскольку он дает неправильные результаты.Он должен вернуть 0, если ничего не найдено для партии 2010. спасибо.

1 Ответ

2 голосов
/ 25 апреля 2011

Итак, вам нужно что-то вроде:

SELECT COALESCE(sum(i.amount),0) AS amount, 
    COALESCE(sum(i.discount),0) AS discount, 
    COALESCE(sum(i.amount)-sum(i.discount),0) AS netpay, 
    b.name AS batch 
FROM batches b 
LEFT JOIN subscribers s on s.bacth_id = b.id
LEFT JOIN invoices i on i.subs_id = s.id
GROUP BY b.name

(угадывание отношений между подписчиками и партиями).

...