Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

358
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda