Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

362
Visualizações
Laravel selecciona productos únicos con el precio más bajo de una tabla

Buen día, estoy tratando de obtener productos únicos con precios más bajos. Tengo una tabla de productos como esta: ingrese la descripción de la imagen aquí

Me gustaría obtener una lista de productos con todas las columnas. Ahora bien, hay algunos productos que tienen más de un proveedor, en ese caso quiero tomar el producto con el cost_price más bajo.

Hasta ahora he probado esto

 $products = DB::table('products') ->select('identifier') ->selectRaw('MIN(cost_price) as cost_price') ->where('stock', '>', 0) ->groupBy('identifier') ->orderBy('cost_price', 'asc') ->distinct()->get();

Esta consulta me devuelve los resultados correctos, pero no puedo agregar más columnas cada vez que agrego una columna, por ejemplo, stock en select. Necesito agregar también en GroupBy y luego obtengo todos los productos.

¿Cómo hacerlo? Gracias por leer.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Necesita una solución/enfoque greatest-n-per-group para este problema.

La consulta;

 SELECT products.* FROM products INNER JOIN (SELECT identifier, MIN(cost_price) AS minPrice FROM products WHERE stock > 0 GROUP BY identifier) AS sub ON sub.minPrice = products.cost_price and sub.identifier = products.identifier;

La versión del generador de consultas;

 $sub = DB::table('products') ->where('stock', '>', DB::raw(0)) ->groupBy('identifier') ->select('identifier', DB::raw('min(cost_price) as minPrice')); return DB::table('products') ->join(DB::raw('(' . $sub->toSql() . ') as sub'), function ($join) { $join->on('sub.minPrice', '=', 'products.cost_price'); $join->on('sub.identifier', '=', 'products.identifier'); }) ->get(['products.*']);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda