【问题标题】:Select Distinct whilst adding tuples together in SQL在 SQL 中将元组添加在一起时选择 Distinct
【发布时间】:2017-12-09 21:14:03
【问题描述】:

我有一个表,其中包含针对具有重复条目的键的随机数据。我正在寻找删除重复项(在关系代数中称为投影),而不是丢弃附加的数据,而是将它们加在一起。例如:

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 可能会做一些事情,但我不确定。

【问题讨论】:

  • 关系代数中没有重复的行。您可以想象通过创建一个看起来像它的非关系然后删除列然后消除重复行然后创建一个看起来像这样的关系来实现对关系的投影。但这是一个涉及非关系的程序。 SQL 表不是关系。 SQL 不能很好地体现关系概念。
  • How does GROUP BY work?的可能重复
  • 在考虑提问之前请先进行研究。这里对 GROUP BY 的任何介绍都会告诉你如何做到这一点。请参阅How to Ask 和向下投票箭头鼠标悬停文本。还点击谷歌搜索“stackexchange 作业”。例如my 1st hit after your question when googling your title 就是这个问题的答案。

标签: mysql sql database relational-algebra


【解决方案1】:

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

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

这表示,对于每个“orderId”分组,对“cost”字段求和并为每个组返回一个值。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多