Mysql 在SQL中将元组添加到一起时选择Distinct

Mysql 在SQL中将元组添加到一起时选择Distinct,mysql,sql,database,relational-algebra,Mysql,Sql,Database,Relational Algebra,我有一个表,其中包含针对具有重复项的键的随机数据。我希望删除重复数据(在关系代数中称为投影),但与其丢弃附加的数据,不如将其相加。例如: orderID cost 1 5 1 2 1 10 2 3 2 3 3 15 应删除orderID中的重复项,同时对每个orderID的值求和: orderID cost 1 17 (5 + 2

我有一个表,其中包含针对具有重复项的键的随机数据。我希望删除重复数据(在关系代数中称为投影),但与其丢弃附加的数据,不如将其相加。例如:

orderID    cost
 1          5
 1          2
 1          10
 2          3
 2          3
 3          15
应删除orderID中的重复项,同时对每个orderID的值求和:

orderID    cost
 1          17       (5 + 2 + 10)
 2          6
 3          15

我的假设是我会以某种方式使用SELECT DISTINCT,但我不知道该怎么做。我理解GROUP BY可能可以做些什么,但我不确定。

在这种情况下,您可以使用
GROUP BY
子句,在按-
orderId
分组的列中,每一个不同的值获取一行。您可以应用聚合函数来获取未按-
sum
分组的列的结果,在这种情况下:

SELECT   orderId, SUM(cost)
FROM     mytable
GROUP BY orderId

这是一个非常基本的聚合:

SELECT orderId, SUM(cost) AS cost
FROM MyTable
GROUP BY orderId

也就是说,对于每个“orderId”分组,求“cost”字段的和,然后每个组返回一个值。

关系代数中没有重复的行。您可以想象在一个关系上实现投影,方法是创建一个看起来像它的非关系,然后删除列,然后消除重复行,然后创建一个看起来像它的关系。但这是一个涉及非关系的过程。SQL表不是关系。SQL不能很好地体现关系概念。在考虑提问之前,请先研究一下可能的重复。在这里,任何关于分组的介绍都会告诉你如何做。请参见文本上方的向下投票箭头(&D)。还点击谷歌的“stackexchange家庭作业”。这是对这个问题的回答。