MySQL如何对两个不同的数据表进行聚合求和?
How do MySQL aggregate sum function with two different data tables?
SELECT
category_id,
product_size,
category_name,
SUM(product_quantity) AS total_quantity
FROM tbl_categories_quantity -- (table-1)
INNER JOIN tbl_categories USING (category_id)
GROUP BY category_id,product_size
以上代码在单个 table 中有效,我想添加以下无效的代码(第二个 table)
SELECT
category_id,
product_size,
SUM(product_sell) AS total_sell
FROM tbl_product_sell -- (table-2)
GROUP BY category_id,product_size;
从 first 子查询检索类别和产品大小明智的总数 quantity 和 second 一个检索总 销售额 基于类别和产品尺寸。然后将这两个子查询与 LEFT JOIN 结合起来,因为有时销售可能不会发生。 COALESCE() 用于将 NULL 值替换为 0(零)。如果需要特定类别或产品尺寸方面的数据,则在两个子查询中都使用 WHERE 子句。由于类别 ID 是唯一的,因此使用 MAX(category_name) 否则类别名称必须放在 GROUP BY 子句中。从总数量中减去总销售额计算 可用数量。
-- MySQL
SELECT t.category_name category
, t.product_size
, t.product_quantity
, COALESCE(p.total_sell, 0) product_sell
, (t.product_quantity - COALESCE(p.total_sell, 0)) available_in_stock
FROM (SELECT tc.category_id
, tcq.product_size
, MAX(tc.category_name) category_name
, SUM(tcq.product_quantity) product_quantity
FROM tbl_categories tc
INNER JOIN tbl_categories_quantity tcq
ON tc.category_id = tcq.category_id
GROUP BY tc.category_id
, tcq.product_size) t
LEFT JOIN (SELECT category_id
, product_size
, SUM(product_sell) total_sell
FROM tbl_stock_sell
GROUP BY category_id
, product_size) p
ON t.category_id = p.category_id
AND t.product_size = p.product_size
请检查url https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=b8c54aa656d9dc930fcb7a93d2bc0960
N.B.: Table 名称或列名称可能因您的数据库而异。
SELECT
category_id,
product_size,
category_name,
SUM(product_quantity) AS total_quantity
FROM tbl_categories_quantity -- (table-1)
INNER JOIN tbl_categories USING (category_id)
GROUP BY category_id,product_size
以上代码在单个 table 中有效,我想添加以下无效的代码(第二个 table)
SELECT
category_id,
product_size,
SUM(product_sell) AS total_sell
FROM tbl_product_sell -- (table-2)
GROUP BY category_id,product_size;
从 first 子查询检索类别和产品大小明智的总数 quantity 和 second 一个检索总 销售额 基于类别和产品尺寸。然后将这两个子查询与 LEFT JOIN 结合起来,因为有时销售可能不会发生。 COALESCE() 用于将 NULL 值替换为 0(零)。如果需要特定类别或产品尺寸方面的数据,则在两个子查询中都使用 WHERE 子句。由于类别 ID 是唯一的,因此使用 MAX(category_name) 否则类别名称必须放在 GROUP BY 子句中。从总数量中减去总销售额计算 可用数量。
-- MySQL
SELECT t.category_name category
, t.product_size
, t.product_quantity
, COALESCE(p.total_sell, 0) product_sell
, (t.product_quantity - COALESCE(p.total_sell, 0)) available_in_stock
FROM (SELECT tc.category_id
, tcq.product_size
, MAX(tc.category_name) category_name
, SUM(tcq.product_quantity) product_quantity
FROM tbl_categories tc
INNER JOIN tbl_categories_quantity tcq
ON tc.category_id = tcq.category_id
GROUP BY tc.category_id
, tcq.product_size) t
LEFT JOIN (SELECT category_id
, product_size
, SUM(product_sell) total_sell
FROM tbl_stock_sell
GROUP BY category_id
, product_size) p
ON t.category_id = p.category_id
AND t.product_size = p.product_size
请检查url https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=b8c54aa656d9dc930fcb7a93d2bc0960
N.B.: Table 名称或列名称可能因您的数据库而异。