2

(1)表(SQL Fiddle):

CREATE TABLE Sales (
    Product Text,
    Sales_Monetary VARCHAR(255),
    Returns_Monetary VARCHAR(255)
);

INSERT INTO Sales
(Product, Sales_Monetary, Returns_Monetary)
VALUES 
("Product A", "500", "300"),
("Product A", "200", "130"),
("Product A", "600", "0"),
("Product A", "900", "540"),
("Product B", "150", "70"),
("Product B", "480", "0"),
("Product B", "220", "0"),
("Product B", "300", "0"),
("Product B", "890", "670"),
("Product C", "360", "0"),
("Product C", "740", "530");

(2) 期望结果:

            Sold_Items   Returned_Items    Return_Rate_Items
Product A      4            3                  0.75
Product B      5            2                  0.4
Product C      2            1                  0.5

我想从上面的示例表中获得Return Rate基于。 因此,我想使用on和。 但是,当我这样做时,也会计算有退货的产品。 为了解决这个问题,我把. 不幸的是,在这种情况下,也不算在内。items
countSales_MonetaryReturns_Monetary
0
WHERE Returns_Monetary > 0
Sales_Monetary

Select 
Product, 
count(Sales_Monetary) AS Sold_Items
count(Returns_Monetary) AS Returned_Items,
count(Returns_Monetary) / count(Sales_Monetary) AS Return_Rate_Items
FROM Sales
WHERE Returns_Monetary > 0
GROUP BY 1;

我需要在查询中进行哪些更改才能使其正常工作?

4

1 回答 1

1

但是,当我这样做时,退货为 0 的产品也会被计算在内。

这是一种仅计算Returns_Monetary大于 0 的方法:

select 
    Product, 
    count(Sales_Monetary) AS Sold_Items
    sum(Returns_Monetary > 0) AS Returned_Items,
    sum(Returns_Monetary > 0) / count(Sales_Monetary) AS Return_Rate_Items
from Sales
group by 1;

sum(Returns_Monetary > 0)Returns_Monetary大于 0 就增加 1。

于 2020-02-20T10:16:53.453 回答