首页 > 解决方案 > SUM 属于同一组的产品数量(group_id)

问题描述

我有一个产品目录,每个产品有 2 个数量(products_quantity 和 products_incoming_quantity),一些产品在 group_id 下分组。

我试图给属于同一组的产品相同的数量,这是所有数量的总和。

我尝试使用 GROUP_BY,但我很难编写 mysql 代码,因为 group_id 在另一个表中。

产品表:

|-------------|---------------|-------------------|----------------------------|
| products_id | products_name | products_quantity | products_incoming_quantity |
|-------------|---------------|-------------------|----------------------------|
|      10     |   Product A   |         05        |             02             |
|-------------|---------------|-------------------|----------------------------|
|      11     |   Product B   |         15        |             08             |
|-------------|---------------|-------------------|----------------------------|
|      12     |   Product C   |         12        |             00             |
|-------------|---------------|-------------------|-------------------------

产品分组表

|---------------------|-------------------|
|     products_id     |     Group_ID      | 
|---------------------|-------------------|
|          10         |         01        |
|---------------------|-------------------|
|          11         |         01        |
|---------------------|-------------------|

询问 :

$listing_sql = "select 
    p.products_id, 
    p.products_quantity, p.products_incoming_quantity, 
    (p.products_quantity + p.products_incoming_quantity) AS sub_quantity,
    g.products_id,
    g.group_id      
    FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS . " WHERE
    p.products_id = g.products_id";

我正在尝试添加新字段“total_quantity”以输出数量值,如下所示:

产品 A 总数量 = 30 产品 B 总数量 = 30

数量相同,因为它们属于同一组。

我需要一些帮助来创建这个查询。

谢谢 :)

标签: mysql

解决方案


您可以加入按组聚合并查找总数量的子查询:

SELECT
    p.products_id,
    p.products_quantity,
    p.products_incoming_quantity,
    (p.products_quantity + p.products_incoming_quantity) AS sub_quantity,
    t.total_quantity,
    g.products_id,
    g.group_id,
FROM products p
INNER JOIN product_groups g
    ON p.products_id = g.products_id
INNER JOIN
(
    SELECT
        g.group_ID,
        SUM(p.products_quantity + p.products_incoming_quantity) AS total_quantity
    FROM products p
    INNER JOIN product_groups g
        ON p.products_id = g.products_id
    GROUP BY g.group_ID
) t
    ON g.group_id = t.group_id;

请注意,我将您的查询语法转换为使用显式内部连接,而不是旧式基于逗号的隐式连接。我编写查询的方式是现代编写查询的首选方式。

如果您使用的是 MySQL 8+ 或更高版本,我们或许可以简化分析函数的使用。


推荐阅读