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.
x
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";