行的总和

时间:2015-06-30 17:36:06

标签: mysql sql aggregate-functions

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

如果我有一张像

这样的表格
type   frequency
---------------
bar       10
soap      25
bar       13

然后我需要表格

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

如何更新此类表格?

我试过

SELECT
    type,
    SUM(frequency)
FROM
   MyTable

但输出就像

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

2 个答案:

答案 0 :(得分:2)

汇总功能需要GROUP BY

试试这个:

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

答案 1 :(得分:2)

您在查询中缺少一个简单的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

这是一种可以使用每种类型的总和更新表的方法。

您的更新将在数据库中为每种类型导致重复条目。对此的一个简单修复是对表进行更改以添加不允许存在多个索引的唯一索引。您必须使用IGNORE,否则它会说您有重复的条目

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

SQL Fiddle Example