我有一个名为 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
之前做到这一点,但我必须首先弄清楚如何获得这些值。
您可能应该使用 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;