Здравствуйте!
Поискал в гугле и по форуму, но похожего не нашёл.
Есть 2 таблицы, по данным из которой нужно производить расчёты.
Некотороые расчёты оперерируют с одними и теме же промежуточными результатами,
как можно переделать запрос, чтобы не выполнять каждый раз подзапросы,
а сохранять промежуточно данные и обращаться к ним, но, желательно в рамках одного запроса,
чтобы вычислялось всё сразу для всех контрактов.
Таблица contracts
id, abonent_info
Таблица charges
id, comment, date, summ, type
Сам запрос:
SELECT c.id, c.abonent_fio,
SELECT (SUM(c.summ) WHERE ch.type = 1) as charged_amm,
SELECT (SUM(c.summ) WHERE ch.type = 2) as paid,
SELECT ((SUM(c.summ) WHERE ch.type = 1) - (SUM(c.summ) WHERE ch.type = 2)) as debt
FROM
contracts c
LEFT JOIN
charges ch ON ch.contract_id = c.id
Запрос максимально упрощён, на самом деле он занимает строк 40 и там значительно больше параметров для фильтрации,
с различными вариациями ch.type и суммированиями между результатами подзапроса.
Было бы очень хорошо, если бы работала такая конструкция:
[src]SELECT c.id, c.abonent_fio,
SELECT (SUM(c.summ) WHERE ch.type = 1) as charged_amm,
SELECT (SUM(c.summ) WHERE ch.type = 2) as paid,
SELECT (charged_amm - paid) as debt
FROM
contracts c
LEFT JOIN
charges ch ON ch.contract_id = c.id
[/SRC]
Но, к сожалению не работает.
Очень надеюсь на вашу помощь!