【问题标题】:SQL Grouped Table JoinSQL 分组表连接
【发布时间】:2019-03-09 05:44:22
【问题描述】:

我正在努力弄清楚如何连接两个分组表,然后执行减法运算

我有这些带有以下列的表格

表 1:购买

供应商 |数量 |价格

表 2:付款

供应商 |付费 |

结果表

供应商 |购买总额 | PaidTotal |(已购买 - 已支付)|

我非常不正确的 Sql 查询

 SELECT t.Vendor, SUM(Quantity * Price) as TotalPurch
    FROM purchases t
    LEFT JOIN (SELECT Vendor, SUM(paid) as TotalPaid FROM paysup GROUP BY Vendor) y
    ON t.Vendor = y.Vendor
    GROUP BY t.Vendor

【问题讨论】:

  • 请使用标签来表明您正在使用哪个数据库,这很重要,因为“sql”不会告诉我们建议使用哪种方言作为解决方案。不同的数据库供应商在其 SQL 实现方面存在差异。

标签: sql join sum


【解决方案1】:

您可以使用公用表表达式 (CTE) 提高可读性:

WITH paid AS ( SELECT Vendor, SUM(Paid) AS PaidTotal
           FROM paysup
           GROUP BY Vendor
   ),
   purch AS ( SELECT Vendor, SUM(Quantity * Price) AS PurchasedTotal
          FROM purchases
          GROUP BY Vendor
   ) 
/* The main query: */
SELECT 
  v.Vendor, 
  purch.PurchasedTotal, 
  paid.PaidTotal, 
  (COALESCE(purch.PurchasedTotal, 0) - COALESCE(paid.PaidTotal, 0)) AS "(Purchased - Paid)"
 FROM Vendors v
  LEFT JOIN purch ON v.Vendor = purch.Vendor
  LEFT JOIN paid ON v.Vendor = paid.Vendor;

【讨论】:

    【解决方案2】:

    在这些情况下,通常会有一个您没有提及的供应商表

      SELECT v.Vendor
         , purch.PurchasedTotal
         , paid.PaidTotal
         , (COALESCE(purch.PurchasedTotal, 0) - COALESCE(paid.PaidTotal, 0)) AS "(Purchased - Paid)"
      FROM Vendors v
      LEFT JOIN ( SELECT Vendor, SUM(Quantity * Price) AS PurchasedTotal
                  FROM purchases
                  GROUP BY Vendor
                 ) purch ON v.Vendor = purch.Vendor
      LEFT JOIN ( SELECT Vendor, SUM(Paid) AS PaidTotal
                    FROM paysup
                   GROUP BY Vendor
           ) paid ON v.Vendor = paid.Vendor
      ;
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT COALESCE(a.Vendor, b.Vendor) AS Vendor
           , a.PurchasedTotal
           , b.PaidTotal
           , (COALESCE(a.PurchasedTotal, 0) - COALESCE(b.PaidTotal, 0)) AS "(Purchased - Paid)"
        FROM ( SELECT Vendor, SUM(Quantity * Price) AS PurchasedTotal
                 FROM purchases
                GROUP BY Vendor
             ) a
        FULL JOIN ( SELECT Vendor, SUM(Paid) AS PaidTotal
                      FROM paysup
                     GROUP BY Vendor
             ) b ON b.Vendor = a.Vendor
      

      【讨论】:

        猜你喜欢
        • 2017-11-21
        • 1970-01-01
        • 2011-03-14
        • 2023-04-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多