【问题标题】:Full outer join: sum per date全外连接:每个日期的总和
【发布时间】:2018-05-04 11:05:02
【问题描述】:

我有两张桌子:orders(id, date, qty) Asales(id, date, qty) B

我想知道每天的总订单和销售量(我可能在同一天没有或很多订单和销售)。

结果应如下所示:A.day1 A.qty B.day1 B.qty

我尝试了完全外部联接,但每天的总数翻了一番。

【问题讨论】:

  • 显示你尝试了什么
  • edit您的问题并添加一些真实的sample data 和基于该数据的预期输出。 Formatted textno screen shots。 (edit 您的问题 - 在 cmets 中邮政编码或其他信息)
  • 您使用的是哪个DBMS product? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloraclesql-serverdb2、...
  • 改为使用 UNION ALL。

标签: sql date join sum


【解决方案1】:

假设我明白你想要什么,你在完全加入的正确路线上:

SELECT  ISNULL(o.OrderDate,s.SaleDate),
        o.Total AS TotalOrders,
        s.Total AS TotalSales
FROM    (
            SELECT  OrderDate,
                    SUM(Qty) AS Total
            FROM    Orders
            GROUP BY OrderDate
        ) o
        FULL JOIN (
                    SELECT  SaleDate,
                            SUM(Qty) AS Total
                    FROM    Sales
                    GROUP BY SaleDate
                  ) s
            ON o.OrderDate = s.SaleDate

我已经重命名了你的一些列名(日期不是一个好名字,因为它是保留的)

此外,未指定您的 DBMS。以上是SQL Server。如果您使用的是 MySQL,则需要将 ISNULL 替换为 IFNULL

【讨论】:

  • 谢谢,它工作得很好!我正在使用 MS SQL。不过,我还是不明白为什么要先分组,然后再加入……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多