varios una tablas tabla seleccionar registros que obtener not identicas estructura entre diferentes comparar coincidentes coinciden campos buscar mysql sql count sum

una - Encontrar la diferencia en el recuento de filas de dos tablas en MySQL



seleccionar varios campos de una tabla en mysql (3)

Prueba esto

SELECT inv_t.product_id, inventory_total-nvl(sales_total,0) FROM (SELECT product_id, sum(quantity) as inventory_total FROM inventory GROUP BY product_id) inv_t LEFT OUTER JOIN (SELECT product_id, count(*) AS sales_total FROM sales GROUP BY product_id) sale_t ON (inv_t.product_id = sale_t.product_id)

Esta es una solución mejor que algunas de las otras publicadas, que no tienen en cuenta el hecho de que algunos productos pueden no tener ninguna fila correspondiente en la tabla de ventas. Desea asegurarse de que dichos productos también aparezcan en los resultados.

NVL es una función específica de Oracle que devuelve el valor del primer argumento, a menos que sea nulo, en cuyo caso devuelve el valor del segundo argumento. Hay funciones equivalentes en todos los DBMS comerciales: puede usar CASE en MySQL con el mismo efecto.

Tengo dos mesas, una almacena los productos y la cantidad que hemos comprado, la otra almacena las ventas. El stock actual es, por lo tanto, la suma de todas las columnas de cantidad en la tabla comprada menos el número de filas en la tabla de ventas. ¿Cómo puede expresarse esto en MySQL? Recuerde que hay muchos productos diferentes.

EDITAR: Para hacerlo más difícil, tengo otro requisito. Tengo la mesa comprada, la mesa vendida, pero también tengo la mesa de productos. Quiero una lista de todos los productos, y quiero saber la cantidad disponible de cada producto. El problema con las respuestas actuales es que solo devuelven los productos que ya hemos vendido o comprado. Quiero todos los productos.


Sugiero hacer las tablas de "inventario" y "ventas" en vistas, para que sean reutilizables y la consulta final sea muy simple. Obviamente, los nombres de campo y tabla deberán cambiar para coincidir con su esquema.

--First view: list products and the purchased qty create or replace view product_purchases as select product_id ,sum(purchased_qty) as purchased_qty from purchases group by product_id; --Second view: list of products and the amount sold create or replace view product_sales as select product_id ,count(*) as sales_qty from sales group by product_id; --after creating those two views, run this query: select pp.product_id ,pp.purchased_qty - ps.sales_qty as on_hand_qty from product_purchases pp ,product_sales ps where ps.product_id = pp.product_id;


SELECT product AS prd, SUM(quantity) - IFNULL((SELECT COUNT(*) FROM sells WHERE product = prd GROUP BY product), 0) AS stock FROM bought GROUP BY product;

Este también funciona cuando la cantidad vendida es 0.