Поскольку я могу улучшать query в Mysql

У меня есть два подмостков (индивидуальных и групповых) и я хочу построить вид, в котором были бы вычислены полные трех полей, которые у обоих есть (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`)))
0
задан 18.10.2019, 23:03
1 ответ

Со мной случается, что ты соединяешь два подмостков с решением СОЮЗ 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
0
ответ дан 01.12.2019, 15:19

Теги

Похожие вопросы