【问题标题】:How do I consolidate/combine data when using a SQL join?使用 SQL 联接时如何合并/组合数据?
【发布时间】:2015-10-21 22:06:58
【问题描述】:

所以我有一个名为 Events 的表,它看起来像:

Id   Date   Title Location
1    2014   test  New York

还有一个名为 Quote Items 的表格:

ID Item_type cost event_id
1  paper     2    1
2  water     1    1

我有一个简单的连接查询,如下所示:

select events.title, events.id, events.location, events.date, active_quote_items.cost
from active_quote_items 
left join events 
on active_quote_items.event_id=events.id 

返回我想要的数据,但每个事件可以有多个 qoute 项目。我想合并这些数据,以便在加入后将所有项目的成本合并到列中。这是可能的,还是类似的可能?

【问题讨论】:

  • 您正在使用几种不同的 RDBMS。怎么会?
  • 您在使用列event_id 的两个表之间存在一对多关系。因此,您需要对 cost 字段进行某种聚合以将其组合在一起。
  • @FutbolFan,不确定你的意思?拥有 event_id 不是建立报价和事件之间关系的最简单方法吗?
  • 不清楚输出应该是什么样子。
  • 我的意思是:你得到多行数据的原因是因为两个表之间的关系(event_id 列)。因此,为了合并成本,您需要进行某种聚合(在本例中为总和),如下所示。 :)

标签: mysql sql sql-server database join


【解决方案1】:

您需要 Group bySum 聚合

SELECT events.title, 
       events.id, 
       events.location, 
       events.date, 
       Sum(active_quote_items.cost) 
FROM   active_quote_items 
       LEFT JOIN events 
              ON active_quote_items.event_id = events.id 
GROUP  BY events.title, 
          events.id, 
          events.location, 
          events.date 

【讨论】:

  • 感谢您的成功。我有一个后续问题。我将如何对总和进行简单的数学运算?例如,我没有在我的示例中包含它,但我有一个估计成本和实际成本列。我将如何总结它们之间的差异?我尝试使用类似 sum(thing) - sum(otherthing)
  • @AndrewFont - 是的,这是正确的。首先尝试一下,如果您遇到任何问题,请来这里
【解决方案2】:

在 SQL Server 中,您还可以使用解析函数 SUM() OVER 来执行此操作:

SELECT e.title
    ,e.id
    ,e.location
    ,e.[DATE]
    ,Sum(aq.cost) OVER (PARTITION BY aq.event_id)
FROM active_quote_items aq
LEFT JOIN events  e ON aq.event_id = e.id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多