Об объединениях таблиц с агрегатными функциями - PullRequest
1 голос
/ 18 октября 2019

У меня есть две таблицы (индивидуальные и групповые). Я хочу создать представление, в котором я могу вычислить итоги трех столбцов. (condones_entregados ,ubricantes_entregados y materiales_educativos_entregados). Эти столбцы находятся в обеих таблицах соответственно. Мне нужно было создать представление для каждой таблицы, где я вычисляю сумму этих столбцов, чтобы получить общую сумму. А затем мне пришлось создать новый вид, чтобы выполнить соединение между ними. Это долго, но я пробовал много разных способов и никогда не удавалось.

Tabla de Grupal

   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`

Tabla de Individual

    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`

Итоговая таблица Tabla

    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`)))

1 Ответ

0 голосов
/ 19 октября 2019

Чтобы избежать необходимости в промежуточных представлениях, вы можете объединяться в подзапросы, а затем присоединяться:

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 (
   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`
) `i`
LEFT JOIN (
    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`
) `g` ON `i`.`id_persona_receptora` = `g`.`id_persona_receptora`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...