Подсчитать все значения из столбца A, но только определенные значения из столбца B - PullRequest
2 голосов
/ 20 февраля 2020

(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 на основе items из приведенной выше таблицы примеров.
Поэтому я хочу использовать count на Sales_Monetary и Returns_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;

Что мне нужно изменить в моем запросе, чтобы он работал?

1 Ответ

1 голос
/ 20 февраля 2020

Однако, когда я делаю это, также учитываются продукты с 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) увеличивается на 1 для каждого Returns_Monetary, превышающего 0.

...