Jump to content
jeanzinsousa

problemas com subquery multiplos resultados

Recommended Posts

Salve, Galera estou com uma dúvida estudando banco de dados e programação.

 

escrevi a seguinte query:

 

SELECT data_pg as diaria, SUM(valor_pg) as valor_diario, SUM(valor_despesa) as valor_despesa, (SELECT SUM(valor_pg) as dinheiro FROM pagamento WHERE tipo = 5 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) as total_dinheiro, (SELECTSUM(valor_pg) as debito FROM pagamento WHERE tipo = 25 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) as total_debito, (SELECT SUM(valor_pg) as credito FROM pagamento WHERE tipo = 15 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) astotal_credito FROM pagamento WHERE MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019 GROUP BY diaria ORDER BY `diaria`

 

resultado:

diaria Descendente 1 valor_diario valor_despesa total_dinheiro total_debito total_credito  
2019-06-10 818.70 0 288.40 586.95 113.30
2019-06-11 169.95 0 288.40 586.95

113.30

 

 

 

 

Como podem ver meu objetivo e separar por dia o resultado dos valores divididos por tipo de pagamento.

porém o mesmo mostra a soma total nas subquery.

quando coloco o group by order by dentro das subquerys apresenta a seguinte mensagem de erro: #1242 - Subquery returns more than 1 row 

 

 

como resolver?

Share this post


Link to post
Share on other sites

Indente a query e coloque numactag code <> , este erro que relatou ocorre pois subqueries de coluna só podem retornar UM valor.

Share this post


Link to post
Share on other sites
19 horas atrás, Motta disse:

Indente a query e coloque numactag code <> , este erro que relatou ocorre pois subqueries de coluna só podem retornar UM valor.

 

Motta,

Obrigado pelo retorno.

Mas não entendi sua colocação.

eu devo colocar <> em qual parte da estrutura? entre as subquery no lugar de igual a.

 

sou iniciante na parte de sql e estou estudando.

Share this post


Link to post
Share on other sites

1º Arrume o sql em uma estrutura hierárquica , fica mais fácil entender , vide.

 

2º na parte de cima do editor tem um botão <> ele serve para formatar o texto como código , selecione o texto e clique no botão.

 

3º O que relatou ocorre pois subqueries de coluna só podem retornar UM valor , analise o retorno possível de seuas queries.

 

 

Share this post


Link to post
Share on other sites
Em 12/06/2019 at 15:07, Motta disse:

1º Arrume o sql em uma estrutura hierárquica , fica mais fácil entender , vide.

 

2º na parte de cima do editor tem um botão <> ele serve para formatar o texto como código , selecione o texto e clique no botão.

 

3º O que relatou ocorre pois subqueries de coluna só podem retornar UM valor , analise o retorno possível de seuas queries.

 

 

 

Entendi.

Obrigado Motta. pelo retorno

 

vou procurar outra  forma.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By manoaj
      Boa noite pessoal!
      Alguém ai entente dos checkouts do Mercado Pago pra me explicar como eu obtenho os dados da preferência criada através da url disponível na API
      https://api.mercadopago.com/checkout/preferences/:id?access_token=ACCESS_TOKEN_ENV  
    • By gersonab
      Bom dia, tenho um select onde gostaria de ordenar o mesmo pelo dia do campo date , segue o mesmo 
      $mesatual = date("m"); $consulta = $pdo->query("SELECT * FROM cli WHERE MONTH(datan) = '$mesatual' ORDER BY DAY(datan) ASC"); não esta ordenando o mesmo, teria de ser pelo dia, pois o mês vai ser sempre o atual e o ano varia conforme data de nascimento.
       
      exemplo de como esta aparecendo :
      18/07/2019
      14/07/2019
      preciso que seja assim :
      14/07/2019
      18/07/2019
    • By Igor Gabriel
      Boa Tarde, estou com uma dúvida.
       
      Estou criando um site para uma imobiliárias, fiz um sistema de cadastro todo bonitinho onde se encontra funcionando perfeitamente. Contudo fora do sistema, no site, quando clico para ver os imoveis, tenho a listagem de todos os imoveis já cadastrados. Quando entro na página para ver mais do Imóvel é trazido consigo todas as informações presentes no banco, ao invés de uma só. Como faço para trazer uma única informação específica do banco?
    • By leocouto
      Pegar um dado específico de uma tabela, caso tenha mais de um item cadastrado sempre vai pegar o último.
      <form name="editaFornecedor"<?php +1?> action="edit_forne.php" id="editaFornecedor" method="POST"> <!-- Pegando todos os fornecedores cadastrados... --> <table class="table table-striped"> <thead class="thead-dark"> <tr> <th scope="col">ID</th> <th scope="col">Nome</th> <th scope="col">Fone</th> <th scope="col">CNPJ</th> <th scope="col">Rua</th> <th scope="col">Número</th> <th scope="col">Bairro</th> <th scope="col">Estado</th> <th scope="col">Cidade</th> <th scope="col">CEP</th> <th scope="col">E-mail</th> <th scope="col">Observação</th> <th scope="col">Editar|Deletar</th> </tr> </thead> <?php @session_start(); include('conexao.php'); $fornecedor = mysqli_query($conexao, "SELECT * FROM fornecedor"); $linhas = mysqli_num_rows($fornecedor); while ($linhas = mysqli_fetch_array($fornecedor)) { ?> <tbody> <tr> <td><?php echo $linhas['id_fornecedor']; ?></td> <td><?php echo $linhas['nome']; ?></td> <td><?php echo $linhas['fone']; ?></td> <td><?php echo $linhas['cnpj']; ?></td> <td><?php echo $linhas['rua']; ?></td> <td><?php echo $linhas['numero']; ?></td> <td><?php echo $linhas['bairro']; ?></td> <td><?php echo $linhas['estado']; ?></td> <td><?php echo $linhas['cidade']; ?></td> <td><?php echo $linhas['cep']; ?></td> <td><?php echo $linhas['email']; ?></td> <td><?php echo $linhas['observacao']; ?></td> <td> <button type="submit" class="btn btn-secondary" style="height: 35px; width: 100px"><i class="material-icons">description</i>Editar</button><br> <button type="button" class="btn btn-danger" style="height: 35px; width: 100px"><i class="material-icons">delete</i>Deletar</button> </td> <td><input type="text" name="id_fornecedor" value="<?php echo $linhas['id_fornecedor'];?>"></td> </tr> </tbody> <?php } ?> </table> <!-- Fim da exibição de todos os fornecedores cadastrados.. --> </form>  
       
      ======================================================================================================================================================
      Aqui no MYSQL só pega o último item da tabela.. Não pega o que foi clicado no botão.
      <?php include('conexao.php'); session_start(); //$cnpj=$_POST['cnpj']; $id_fornecedor=$_POST['id_fornecedor']; echo $id_fornecedor; ?> =======================================================================================================================================================
      É desse modelo da imagem, mas na hora que clico em editar no mysql aparece o último id e não na linha que cliquei, se eu clicar no primeiro na outra página aparece o id 4, que é o ultimo, quem pode me dar essa força? Ficarei muito grato.

    • By TaisStream
      Como configurar essa query com inner join, no arquivo .xml?
      Me ajudem pf eu comecei mas estou perdida,  pesquisei já vi algo de /root... mas minha query esta diferente, nao sei se falta algo
       
       
      QUERY ATUAL:
      set mapreduce.job.queuename=low_relatorios; 
      set mapreduce.job.max.split.locations=100;
      SELECT a.num_msisdn,
             a.max_date
      FROM fact.dw_f_rcrg_gems_rate_subsc t
      INNER JOIN
        (SELECT num_msisdn,
                MAX(dat_operacao) AS max_date
         FROM fact.dw_f_rcrg_gems_rate_subsc
         WHERE (ref_date)>=$startdate
           AND ref_date<=$finaldate
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
      AND a.max_date = t.dat_operacao
      WHERE ref_date>=$startdate
      AND ref_date<=$finaldate;
       
      QUERY CONFIGURANDO NO XML: 
       
          <value><![CDATA[[
      INSERT
              overwrite TABLE fact.dw_f_rcrg_gems_rate_subsc t 
              (
                      a.num_msisdn,
                      a.max_date
              )
      (SELECT
          INNER JOIN
      SELECT      
              MAX(dat_operacao) AS max_date;
      FROM fact.dw_f_rcrg_gems_rate_subsc) a
         WHERE (ref_date)>='$startdate'
           AND ref_date<=$'finaldate'
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
                  AND a.max_date = t.dat_operacao
      WHERE ref_date>='$startdate'
      AND ref_date<=$finaldate;]]>
      </value>
       
       
      Poderiam me ajudar por favor, sou estagiario na area e ainda estou aprendendo.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.