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 TheRonaldoStar
      Oii, fala ae pessoal!!
      Alguém pode me ajudar com uma coisa por favor?;
      Seguinte!, eu anteriormente fiz uma pergunta aqui no fórum recorrente a isso, mas eu conseguir uma solução parcial.
      Que era, fazer uma listagem de todos os cadastros e fazer a junção dos cadastros com uma coluna igual, Ou seja existem duas colunas [DE e Para], que recebem o id de quem está recebendo ou que está enviando a mensagem, eu conseguir fazer a tal listagem por grupo mas o problema que estou tendo é: que so faz o agrupamento de as colunas contiver o id por ex: [De = "1" e Para ="2"].
      Atualmente estou usando a codificação deste Jeito:
       
      $sql_2 = $db -> prepare("SELECT * FROM privado WHERE (Para = '$Meu_id') Or (De = '$Meu_id') GROUP BY Para, De DESC"); $sql_2 -> execute(); Esta consulta como pode ver ele busca todos os cadastros que tenha o meu ID ou seja do usuário online!, Após a consulta ele vei obter em um "while" somente o [ Id_De eo Id_Para ] desta forma:
      while($dados_2 = $sql_2 -> fetch(PDO::FETCH_OBJ)){ $Id_De = ($dados_2 -> De); $Id_Para = ($dados_2 -> Para); } Mas em fim eu gostaria de saber como mostrar somente um resultado ou seja o ultimo resultado que tiver o meu ID em ambas colunas [ Id_De ou Id_Para ].
      Antes de vocês me recomendar a função DESC LIMIT 'valor' saiba eu quero que liste todos os usuários que enviou ou recebeu minha mensagem não somente 1 ou seja se eu mandar um mensagem para o usuário 2 e ele me retornar uma mensagem vai mostrar somente o ultimo registro que tenha o meu ID e o id dele.
       
      Atenciosamente,
      ~Ronaldo
       
    • By maruoppolo
      Olá, tenho 2 tabelas:
       
      tb_dados: ID - MUSICA
       
      tb_votos: ID - VOTO - RADIO - MUSICA
       
      Preciso fazer uma query que traga as musicas da tb_dados porém ordenando pelo número de votos que ela teve na tb_votos.
       
      Então assim, existem 2 tipos de voto 1 = like e 2 = dislike, cada ver que um usuário vota eu pego qual radio que ele esta ouvindo e salvo no campo radio, o id da musica na tb_dados e salvo no campo musica da tb_votos e coloco o número 1 para like e 2 para dislike no campo voto.
       
      A query precisa contar quantos likes teve na tv_votos filtrando por radio e mostrando os resultados em ordem decrescente as musicas com mais likes.
       
      A ideia é trazer as 10 musicas com mais like de cada radio
       
      Alguma ideia de como fazer?? Estou enroscado nisso a dias.
    • By Chester1
      oi, eu to tentando mexer com servidores agora no PHP e esta dando um erro muito estranho que quando eu procuro em um programa que acha erros de sintaxe ele me diz que o erro esta no </HTML>    se alguem puder me dizer qual foi o erro que eu cometi eu agradeceria
       

       
      <HTML> <HEAD><TITLE>incluindo no banco de dados</TITLE></HEAD> <body> <BODY bgcolor="#d0d0d0"> <center> <h3>Lanchonete coma bem (voltada para o internauta)</h3> <h1>24horas</h1> <?php $login_digitado=$_POST['login']; $senha=$_POST['senha']; $nome=$_POST['nome']; $email=$_POST['email']; $telefone=$_POST['telefone']; $celular=$_POST['celular']; $endereco=$_POST['endereco']; $complemento=$_POST['complemento']; if ($login_digitado == "" || $senha == "" || $nome =="" || $email == "" || $telefone == "" || $endereco == "" || $complemento == "") { echo "existem(m) campos(s) de preenchimento obrigatorio em branco,<BR> infelizmente tera que voltar para preenche-lo(s)."; echo "<BR><a href=\"cadastro.php\">clique aqui para tentar novamente</a>"; } else { { $link=mysql_connect("localhost", "root", "") or die ("<h1>nao foi possivel conectar !!!</h1> ".mysql_error());  
      obs :estou trabalhando com formularios e servidores
         
         
         
         
      ?>
      </BODY>
      </HTML>
    • By rainbowily
      Sou nova em sql e estou com duvida em como fazer uma consulta:
      Eu tenho uma tabela de produto(id, descricao), cor(id, nome) e produto_cor(id, id_produto, id_cor). Preciso descobrir se tem algum produto que tenhas as cores (1,2,3) respectivamente para não deixar cadastrar outro produto. Alguém poderia me ajudar? Obrigada



    • By DavidPin94
      Boa tarde, estou tentando criar uma validação para saber se o usuário já está cadastrado no meu banco de dados para meu sistema ficar mais organizado, porém quando realizo o teste cadastrando um usuário já cadastrado, o cadastro ocorre sendo que não era para ocorrer
      <?php require_once("conexao.php");?> <?php if (isset($_POST['usuario'])) { $nome = utf8_decode($_POST['usuario']); $senha = utf8_decode($_POST['senha']); $inserir = "INSERT INTO cadastro "; $inserir .= "(usuario, senha) "; $inserir .= "VALUES "; $inserir .= "('$nome', '$senha')"; $query = "SELECT usuario FROM cadastro WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); $query = "SELECT usuario FROM clientes WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); if (mysqli_num_rows($consulta) < 1) { $operacao_inserir = mysqli_query($conecta, $inserir); if (! $operacao_inserir) { die("Erro no banco"); }else header("location: login.php"); }else{ die("Usuário existente!"); } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Cadastrar novo usuário</title> <link rel="stylesheet" type="text/css" href="estilo.css"> </head> <body> <nav> <ul> <li><a href="inicial.php">PÁGINA INICIAL</a></li> <li><a href="quem_somos.php">QUEM SOMOS</a></li> </ul> </nav> <div id="cadastro"> <form method="post" action="cadastro.php"> <label>Digite seu nome de usuário</label> <input type="text" name="usuario" placeholder="Ex: Usuario123" required size="50" minlength="5" maxlength="20" autofocus><br> <label>Digite sua senha</label> <input type="password" name="senha" placeholder="Deve conter mais de 5 caracteres" required size="50" minlength="5" maxlength="20" autofocus><br> <input type="submit" value="Cadastrar" id="enviar" name="enviar"> </form> </div> </body> </html> ,  alguém poderia me ajudar?  Meu código:
×

Important Information

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