【问题标题】:How to SUM Row values and save the result in a new Total Column?如何求和行值并将结果保存在新的总列中?
【发布时间】:2012-10-26 00:06:15
【问题描述】:

我需要计算一些行的库存总和,不同公司存在相同的产品,所以我需要计算所有产品的 SUM/Total,每个产品名称,这是我想要实现的结果:

ID | Name     | Company | Stock | Total Stock
1  | Product1 | Company1| 10    | 30
2  | Product1 | Company2| 10    | 30
3  | Product1 | Company2| 10    | 30
4  | Product2 | Company1| 10    | 15
5  | Product2 | Company2| 5     | 15
6  | Product3 | Company2| 5     | 5
7  | Product4 | Company1| 6     | 10
8  | Product4 | Company2| 4     | 10

等等... 总库存是 Select SUM(Stock) From Product Where Name="Product1" 的总和 我怎样才能保存这个结果?我应该使用触发器还是过程?我有基本的 SQL 知识

这需要每 30 分钟或每次更新一行时运行一次。

产品表有大约 40.000 个产品。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:
    SELECT  a.*, b.totalStock
    FROM    tableName a
            INNER JOIN
            (
                SELECT Name, SUM(Stock) totalStock
                FROM tableName
                GROUP BY Name
            ) b on a.name = b.name
    -- WHERE a.Name = 'Product1'
    

    SQLFiddle Demo

    PS:你需要使用ID 而不是Name

    【讨论】:

    • 嗨,John,谢谢你,这非常快 :) 你能解释一下如何自动执行此操作,每 30 分钟一次,或者如果其中一行更新?
    • @AdamSurfari 如您所见,子查询获取表中每个产品名称的库存总数。这是针对相同产品名称的原始表连接。
    • 这可用于 40.000 产品表吗?还是这些内部连接开始导致性能问题?
    • 稳定性不仅仅基于行数,还基于索引和其他性能指标。使用 mysql explain 查看查询的外观。
    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多