I’m trying to derive a table as CustomerID, OrderCount and ReturnCount from a table with columns as CustomerID
, OrderID
, ReturnFlag
I’ve tried the following code that gives me 2 distinct tables but I want the results in a single output table.
select "CustomerID", count(DISTINCT "OrderID") as OrderCount from "Customer" group by "CustomerID"; select "CustomerID", count(DISTINCT "OrderID") as ReturnCount from "Customer" where "ReturnFlag" = 1 group by "CustomerID";
Source Table –
|CustomerID| |OrderID| |ReturnFlag| |1 | | A | | 0 | |2 | | B | | 1 | |1 | | C | | 0 | |2 | | D | | 0 | |3 | | E | | 1 |
Expected output table –
|CustomerID| |OrderCount| |ReturnCount| |1 | | 2 | | 0 | |2 | | 2 | | 1 | |3 | | 1 | | 1 |
Advertisement
Answer
Use a case
expression to do conditional aggregation:
select "CustomerID", count(DISTINCT "OrderID") as OrderCount, count(DISTINCT case when "ReturnFlag" = 1 then "OrderID" end) as ReturnCount from "Customer" group by "CustomerID";