行总和

Summation of rows

我正在尝试维护一个项目集合的数据库。从文件集合中读取项目和值。我想要 table 中重复项的频率总和。

如果我有一个table喜欢

type   frequency
---------------
bar       10
soap      25
bar       13

那么我需要 table 成为

type   frequency
---------------
bar       23
soap      25

如何更新这样的 table?

我试过了

SELECT
    type,
    SUM(frequency)
FROM
   MyTable

但输出就像

type    frequency
-----------------
bar       48

聚合函数需要 GROUP BY

试试这个:

SELECT
    type,
    SUM(frequency)
FROM
    MyTable
GROUP BY 
    type

您在查询中缺少一个简单的 GROUP BY 来告诉聚合函数 SUM() 如何对数据进行分组。如果没有 GROUP BY,您的聚合函数只会将所有行加在一起。

UPDATE table t,
(   
    SELECT type, SUM(frequency) as frequency
    FROM table
    GROUP BY type
) t1

SET t.frequency = t1.frequency WHERE t.type = t1.type

这是一种用每种类型的总和更新 table 的方法。

您的更新将导致数据库中每种类型的条目重复。对此的一个简单解决方法是对 table 进行更改以添加一个唯一索引,该索引不允许超过一个。你必须使用 IGNORE 否则它会说你有一个重复的条目

ALTER IGNORE TABLE table ADD UNIQUE INDEX `my_special_idx` (type, frequency);

SQL Fiddle Example