连接两个表时如何计算列中的个人名称(不是不同的?)?

问题描述 投票:0回答:1

我有一个名为 Orders 的表,它有一个主键 OrderID,一个名为 RMA 的表,有一个外键 OrderID 将表绑定在一起。我有 9 种产品类型。

SELECT {Product Name} COUNT()
返回 9 种产品中每一种的订单数。我正在尝试构建一个输出表,其中包含 {Product Name}、{Count of each product in my orders table}、{Count of each product in RMA table after a join} 和 {PercentageReturned} 列。

我可以按产品类型正确计算订单。如果没有连接,我只在订单表中获得数字,而通过连接,我在连接表中获得订单数,但我无法获得一个包含两个结果的表。每次尝试都会返回一个计算每一行的表,而不是每个产品的计数。

SELECT SKU, COUNT(*) AS NumberOrdered,
    (SELECT COUNT(SKU)
    FROM Orders
    INNER JOIN RMA
    ON Orders.OrderID = RMA.OrderID
    ) AS NumberReturned
FROM Orders
GROUP BY SKU
ORDER BY NumberOrdered DESC;

结果:

SKU 订购数量 已退货
BAS-48-1 C 8385 37566
ENT-48-40F 6186 37566
ENT-48-10F 4329 37566
BAS-08-1 C 4285 37566
ENT-24-10F 4275 37566
ADV-24-10C 4178 37566
ADV-48-10F 4174 37566
ENT-24-40F 2152 37566
BAS-24-1 C 34 37566

我希望 NumberReturned 列提供两个表连接后出现的每个 SKU 的计数,但它返回表中每一行的计数。我尝试了

COUNT(*)
COUNT(SKU)
和其他东西。

我还想添加一个 PercentageReturned 列。我可能可以在

NumberReturned * 100 / NumberOrdered
之前做到这一点,但我必须首先弄清楚如何获得这些值。

mysql count inner-join
1个回答
0
投票

您可能应该使用 LEFT OUTER JOIN(这将保留所有订单行,即使没有 RMA 行)。

SELECT
  o.SKU,
  COUNT(*)           AS NumberOrdered,
  COUNT(r.OrderID)   AS NumberReturned
FROM
  Orders          AS o
LEFT OUTER JOIN
  RMA             AS r
    ON r.OrderID = o.OrderID
GROUP BY
  o.SKU
ORDER BY
  NumberOrdered DESC;
© www.soinside.com 2019 - 2024. All rights reserved.