Mysql - merge queries into different tables

Asked

Viewed 38 times

1

Hello I have the following commands:

SELECT CASE Extract(month FROM data_cadastro) 
         WHEN 1 THEN 'Janeiro' 
         WHEN 2 THEN 'Fevereiro' 
         WHEN 3 THEN 'Março' 
         WHEN 4 THEN 'Abril' 
         WHEN 5 THEN 'Maio' 
         WHEN 6 THEN 'Junho' 
         WHEN 7 THEN 'Julho' 
         WHEN 8 THEN 'Agosto' 
         WHEN 9 THEN 'Setembro' 
         WHEN 10 THEN 'Outubro' 
         WHEN 11 THEN 'Novembro' 
         WHEN 12 THEN 'Dezembro' 
       END                           AS mes, 
       Sum(valor1 + valor2 + valor3) AS total1 
FROM   recebimentos 
WHERE  Extract(year FROM data_cadastro) = Year(Curdate()) 
GROUP  BY mes 
ORDER  BY mes DESC 


SELECT CASE Extract(month FROM data_cadastro) 
         WHEN 1 THEN 'Janeiro' 
         WHEN 2 THEN 'Fevereiro' 
         WHEN 3 THEN 'Março' 
         WHEN 4 THEN 'Abril' 
         WHEN 5 THEN 'Maio' 
         WHEN 6 THEN 'Junho' 
         WHEN 7 THEN 'Julho' 
         WHEN 8 THEN 'Agosto' 
         WHEN 9 THEN 'Setembro' 
         WHEN 10 THEN 'Outubro' 
         WHEN 11 THEN 'Novembro' 
         WHEN 12 THEN 'Dezembro' 
       END                   AS mes, 
       Sum(valor + comissao) AS total2 
FROM   pagamentos 
WHERE  Extract(year FROM data_cadastro) = Year(Curdate()) 
GROUP  BY mes 
ORDER  BY mes DESC 

These tables have no relation between them, as I do to return the two results in the same survey, grouped by month, even if in this month some table is empty.

1 answer

0

What you can do is create a SUBSELECT for each table "simulating" as an existing table and cross them through the OUTER JOIN (this is a type of Join that brings the result of the two tables), see the example:

SELECT rec.Mes, rec.valor_recebimento, pag.valor_pagamento
    
--SUBSELECT RECEBIMENTOS
FROM (
      SELECT CASE Extract(month FROM data_cadastro) 
               WHEN 1 THEN 'Janeiro' 
               WHEN 2 THEN 'Fevereiro' 
               WHEN 3 THEN 'Março' 
               WHEN 4 THEN 'Abril' 
               WHEN 5 THEN 'Maio' 
               WHEN 6 THEN 'Junho' 
               WHEN 7 THEN 'Julho' 
               WHEN 8 THEN 'Agosto' 
               WHEN 9 THEN 'Setembro' 
               WHEN 10 THEN 'Outubro' 
               WHEN 11 THEN 'Novembro' 
               WHEN 12 THEN 'Dezembro' 
             END                           AS mes, 
             Sum(valor1 + valor2 + valor3) AS valor_recebimento 
      FROM   recebimentos 
      WHERE  Extract(year FROM data_cadastro) = Year(Curdate()) 
      GROUP  BY mes 
      ORDER  BY mes DESC ) rec
      
--OUTER JOIN PARA TRAZER TODOS OS REGISTROS DAS DUAS TABELAS
--SUBSELECT PAGAMENTO
OUTER JOIN (
            SELECT CASE Extract(month FROM data_cadastro) 
                     WHEN 1 THEN 'Janeiro' 
                     WHEN 2 THEN 'Fevereiro' 
                     WHEN 3 THEN 'Março' 
                     WHEN 4 THEN 'Abril' 
                     WHEN 5 THEN 'Maio' 
                     WHEN 6 THEN 'Junho' 
                     WHEN 7 THEN 'Julho' 
                     WHEN 8 THEN 'Agosto' 
                     WHEN 9 THEN 'Setembro' 
                     WHEN 10 THEN 'Outubro' 
                     WHEN 11 THEN 'Novembro' 
                     WHEN 12 THEN 'Dezembro' 
                   END                   AS mes, 
                   Sum(valor + comissao) AS valor_pagamento 
            FROM   pagamentos 
            WHERE  Extract(year FROM data_cadastro) = Year(Curdate()) 
            GROUP  BY mes 
            ORDER  BY mes DESC ) pag
            
--CRUZAMENTO ENTRE OS SUBSELECTS
ON rec.mes = pag.mes

Depending on what you are doing the ideal is to bring the year in the queries and add them in the ON of OUTER JOIN so that months of different years are not grouped.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.