【问题标题】:SUM quantity of products that belong to the same group (group_id)SUM 属于同一组的产品数量(group_id)
【发布时间】:2019-01-12 11:41:24
【问题描述】:

我有一个产品目录,每个产品有 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 total_quantity = 30 产品 B total_quantity = 30

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

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

谢谢:)

【问题讨论】:

  • 一个问题:同一个产品可以分多组吗?
  • 你的预期输出是什么?
  • @Psi No 不能再次选择同一产品插入同一组或另一组。
  • 那为什么它在不同的表中呢?只需将其作为产品表的附加列
  • @TimBiegeleisen 我试图将相同 group_id 的产品的 sub_quantity 的 SUM 存储为 total_quantity。例如产品 A 总数量 = 30 和产品 B 总数量 = 30

标签: mysql


【解决方案1】:

您可以加入一个子查询,该查询按组聚合并查找总数量:

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+ 或更高版本,我们或许可以简化分析函数的使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2017-08-02
    • 2013-12-01
    • 2013-06-25
    • 2010-10-10
    相关资源
    最近更新 更多