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

205
Vistas
Postgresql Uniendo tablas sin perder registros

Digamos que tengo las siguientes tablas:

1 - Stock Inicial :

 vendor | starting_stock ------------------------ adidas | 13 Reebok | 5

2 - Reponer :

 vendor | restocks ----------------- adidas | 2 nike | 3

3 - Ventas :

 vendor | quantity_sold ---------------------- adidas | 10 nike | 1

Quiero que mi tabla resultante sea la venta agrupada por proveedor. En este escenario, la venta directa se calcula así: quantity_sold/(starting_stock + restocks) . Mi único problema es que es posible que las tablas de stock inicial y reabastecimiento no tengan algunos proveedores que están presentes en la tabla de ventas. Entonces, en el escenario anterior, StartingStock no tiene nike como registro. Entonces, si ese es el caso, la venta de nike sería solo 1/3 o 1/(3+0) . Por lo tanto, mi tabla resultante sería:

 vendor | sell_through --------------------- adidas | 1.5 nike | 0.33 Reebok | 0

Por lo tanto, me gustaría que todos los proveedores estuvieran presentes en la tabla de resultados (si no tiene ventas, el valor es 0, como se muestra arriba en Reebok).

Traté de trabajar con los diferentes tipos de uniones pero no pude conseguirlo. Cualquier ayuda sería genial. Gracias.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Podemos probar un enfoque de unión externa completa aquí:

 SELECT COALESCE(ss.vendor, r.vendor, s.vendor) AS vendor, COALESCE(s.quantity_sold, 0) / (COALESCE(ss.starting_stock, 0) + COALESCE(r.restocks, 0)) AS sell_through FROM StartingStock ss FULL OUTER JOIN Restock r ON ss.vendor = r.vendor FULL OUTER JOIN Sales s ON s.vendor = COALESCE(ss.vendor, r.vendor)

Manifestación

Tenga en cuenta que obtengo 2/3 para la venta directa de Adidas, ya que la cantidad vendida es 10 y la suma de las existencias es 15.

over 4 years ago · Santiago Trujillo Denunciar

0

Yo usaría union all y agregación:

 select vendor, sum(starting_stock), sum(restock), sum(quantity_sold), (sum(quantity_sold) * 1.0 / sum(starting_stock) + sum(restock)) as sell_through from ((select vendor, starting_stock, 0 as restock, 0 as quantity_sold from startingstock ) union all (select vendor, 0 as starting_stock, restock, 0 as quantity_sold from restock ) union all (select vendor, 0 as starting_stock, 0 as restock, quantity_sold from sales ) ) v group by vendor;

En particular, esta versión incluye cada número en el cálculo solo una vez. Un enfoque JOIN producirá resultados inexactos si un proveedor tiene varias filas en cualquiera de las tablas.

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