У меня есть два подмостков (индивидуальных и групповых) и я хочу построить вид, в котором были бы вычислены полные трех полей, которые у обоих есть (condones_entregados, lubricantes_entregados и materiales_educativos_entregados) группируя результаты из-за id_persona_receptora (что единственный). В каждой из подмостков, у стоимости колонн (condones_entregados, lubricantes_entregados и materiales_educativos_entregados) есть различная стоимость.
Так что решение, которое я взял, состоит в том, чтобы создавать вид для индивида и другой для группового, где вычисляется сумма стоимости трех колонн. И после создавать третий вид, где я осуществляю союз обоих.
Кто-то, что смог refactorizar этот код? Я попытался в единственном виде с союзом обоих подмостков, но у меня была бесконечность неудач и это решение, которое я нашел.
Первый взгляд
SELECT
SUM(`condones_entregados`) AS `total_C`,
SUM(`lubricantes_entregados`) AS `total_L`,
SUM(`materiales_educativos_entregados`) AS `total_M`,
`id_persona_receptora`
FROM
`promotor_realiza_actividad_grupal_con_personas_receptoras`
GROUP BY `id_persona_receptora`
Второй Вид
SELECT
SUM(`condones_entregados`) AS `total_C`,
SUM(`lubricantes_entregados`) AS `total_L`,
SUM(`materiales_educativos_entregados`) AS `total_M`,
`id_persona_receptora`
FROM
`promotor_realiza_entrevista_individual`
GROUP BY `id_persona_receptora`
Конечный вид
SELECT
`i`.`id_persona_receptora` AS `id_persona_receptora`,
(`i`.`total_C` + `g`.`total_C`) AS `C`,
(`i`.`total_L` + `g`.`total_L`) AS `L`,
(`i`.`total_M` + `g`.`total_M`) AS `M`
FROM
(`total_grupales` `i`
LEFT JOIN `total_individuales` `g` ON ((`i`.`id_persona_receptora` = `g`.`id_persona_receptora`)))
Со мной случается, что ты соединяешь два подмостков с решением СОЮЗ ALL, таким образом не importarГЎ, если только эта в таблице. У тебя остался бы вид что-либо подобное:
CREATE VIEW entrega_condones AS
SELECT
g.condones_entregados AS condones_entregados,
g.lubricantes_entregados AS lubricantes_entregados,
g.materiales_educativos_entregados AS materiales_educativos_entregados,
g.id_persona_receptora AS id_persona_receptora
FROM
promotor_realiza_actividad_grupal_con_personas_receptoras g
UNION ALL
SELECT
i.condones_entregados AS condones_entregados,
i.lubricantes_entregados AS lubricantes_entregados,
i.materiales_educativos_entregados AS materiales_educativos_entregados,
i.id_persona_receptora AS id_persona_receptora
FROM
promotor_realiza_entrevista_individual i
Как только были объединены два подмостков, просто ты достаешь сумму полных:
SELECT
SUM(condones_entregados) AS total_C,
SUM(lubricantes_entregados) AS total_L,
SUM(materiales_educativos_entregados) AS total_M,
id_persona_receptora
FROM
entrega_condones
GROUP BY id_persona_receptora