sql hide query parameter in return

0

Have the following query:

                    SELECT idProdutos, SUM(quantidade) as soma
                    FROM pedidos
                    GROUP BY idProdutos
                    ORDER BY soma DESC                          

That returns the id and the grouped sum of the products in the table.

However, I need to return only the idProdutos to put in an IN clause as below.

This is a way to hide query parameter soma on return.

Is there a way to do this in MySQL ?

     $string = "SELECT 
                  idProdutos, 
                   idCategorias,  
                   codigo,   
                   nome,    
                   data,  
                   precoUnitario,  
                   bloqueado,  
                   lancamento,   
                   freteGratis,
                   oportunidade,
                   descricao,  
                   desconto,
                   estoque, 
                   peso
                FROM produtos
                WHERE idProdutos IN 
                (
                    SELECT idProdutos, SUM(quantidade) as soma
                    FROM pedidos
                    GROUP BY idProdutos
                    ORDER BY soma DESC                          
                )
                LIMIT 0,12";
    
asked by anonymous 03.03.2017 / 18:25

3 answers

0

Jeferson,

You can substitir by this code, which will return all products sold:

....WHERE idProdutos IN(SELECT distinct(idProdutos)FROM pedidos)

Now if you need the best selling products, the correct one would be to use rank that in the case you have in Oracle, but doing so I think it works:

SELECT prod.idProdutos,
   prod.idCategorias,
   prod.codigo,
   prod.nome,
   prod.data,
   prod.precoUnitario,
   prod.bloqueado,
   prod.lancamento,
   prod.freteGratis,
   prod.oportunidade,
   prod.descricao,
   prod.desconto,
   prod.estoque,
   prod.peso,
 --  ped.soma -- caso queira mostrar a quantidade remova o comentário
FROM produtos as prod, 
(SELECT idProdutos, SUM(quantidade) as soma
    FROM pedidos
    GROUP BY idProdutos
    ORDER BY soma DESC
) ped 
WHERE prod.idProdutos = ped.idProdutos
LIMIT 0,12
order by ped.soma
    
03.03.2017 / 18:53
0

One good way to do this is to use JOIN with the table you want and group everything from the first table. You could do it your way too, but the LIMIT would have it in SubQuery and not in the main Query

SELECT 
   p.idProdutos, 
   p.idCategorias,  
   p.codigo,   
   p.nome,    
   p.data,  
   p.precoUnitario,  
   p.bloqueado,  
   p.lancamento,   
   p.freteGratis,
   p.oportunidade,
   p.descricao,  
   p.desconto,
   p.estoque, 
   p.peso
FROM produtos p
  JOIN pedidos pe
    ON p.idProdutos = pe.idProdutos
GROUP BY p.idProdutos, p.idCategorias, p.codigo, p.nome, p.data, p.precoUnitario, p.bloqueado, p.lancamento, 
   p.freteGratis, p.oportunidade, p.descricao, p.desconto, p.estoque, p.peso
ORDER BY SUM(pe.quantidade) DESC 
LIMIT 0,12
    
03.03.2017 / 18:56
0

Thank you to all who helped.

But I thought it was simpler:

            SELECT 
              idProdutos, 
               idCategorias,  
               codigo,   
               nome,    
               data,  
               precoUnitario,  
               bloqueado,  
               lancamento,   
               freteGratis,
               oportunidade,
               descricao,  
               desconto,
               estoque, 
               peso
            FROM produtos
            WHERE idProdutos IN (
                SELECT idProdutos
                FROM pedidos
                GROUP BY idProdutos
                ORDER BY sum(quantidade) desc                       
            )
            LIMIT 0,12
    
03.03.2017 / 19:11