mysql - 查找MySQL中两个表的行数差异

标签 mysql sql count sum

我有两个表,一个存储我们购买的产品和数量,另一个存储销售。因此,当前库存是购买表中所有数量列的总和减去销售表中的行数。这在MySQL中如何表达。请记住,有许多不同的产品。

编辑: 为了让它更难,我还有一个要求。我有 bought 表,sold 表,但我也有 products 表。我想要所有产品的 list ,并且我想知道每种产品的可用数量。当前答案的问题在于他们只退还我们已经出售或购买的产品。我想要所有的产品。

最佳答案

试试这个


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)

这是比其他几个发布的解决方案更好的解决方案,这些解决方案没有考虑到某些产品在销售表中可能没有任何对应行的事实。您希望确保此类产品也出现在结果中。

NVL 是一个特定于 Oracle 的函数,它返回第一个参数的值,除非它为空,在这种情况下它返回第二个参数的值。所有商业 DBMS 中都有等效的函数——您可以在 MySQL 中使用 CASE 来达到相同的效果。

关于mysql - 查找MySQL中两个表的行数差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243035/

相关文章:

php - 显示 mysql 表中的所有数据以及第二个表中的附加信息

mysql - 返回比赛中事件的最佳结果

sql - 根据字段值增量并创建记录

sql-server - 错误的计数结果

node.js - Mongoose 数量

MySQL 在插入触发后更新不同表中的字段

MYSQL获取观看过所有足球比赛的人

sql - 带有可选 "WHERE"参数的存储过程

php - Mysql从两个大表中找到不匹配的记录

c++ - 作业 : Counting number of times an item occurs in a linked list