Sql 如何计算同一订单id的订单数量和退货数量?
我试图从列为Sql 如何计算同一订单id的订单数量和退货数量?,sql,Sql,我试图从列为CustomerID,OrderID,ReturnFlag的表中派生一个CustomerID、OrderCount和ReturnCount表 我尝试了下面的代码,它给了我两个不同的表,但我希望结果在一个输出表中 select "CustomerID", count(DISTINCT "OrderID") as OrderCount from "Customer" group by "CustomerID"; select "CustomerID", count(DISTINC
CustomerID
,OrderID
,ReturnFlag
的表中派生一个CustomerID、OrderCount和ReturnCount表
我尝试了下面的代码,它给了我两个不同的表,但我希望结果在一个输出表中
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";
源表-
|CustomerID| |OrderID| |ReturnFlag|
|1 | | A | | 0 |
|2 | | B | | 1 |
|1 | | C | | 0 |
|2 | | D | | 0 |
|3 | | E | | 1 |
预期产出表-
|CustomerID| |OrderCount| |ReturnCount|
|1 | | 2 | | 0 |
|2 | | 2 | | 1 |
|3 | | 1 | | 1 |
使用条件聚合:
select "CustomerID",
count(DISTINCT case when "ReturnFlag" = 1 THEN "OrderID" end) as ReturnCount
count(DISTINCT "OrderID") as OrderCount
from "Customer"
group by "CustomerID";
我有点困惑为什么
CustomerID
在名为Customer
的表中不是唯一的。我希望此查询在Orders
表上运行,而不是在customers表上运行。使用case
表达式进行条件聚合:
select "CustomerID",
count(DISTINCT case when "ReturnFlag" = 1 THEN "OrderID" end) as ReturnCount
count(DISTINCT "OrderID") as OrderCount
from "Customer"
group by "CustomerID";
您没有指定DBMS,因此这是ANSI SQL 您可以为此使用条件聚合:
select "CustomerID",
count(DISTINCT "OrderID") as OrderCount,
count(DISTINCT "OrderID") filter (where "ReturnFlag" = 1) as return_count
from "Customer"
group by "CustomerID";
如果DBMS不支持标准的filter()
子句,则可以使用大小写表达式:
select "CustomerID",
count(DISTINCT "OrderID") as OrderCount,
count(DISTINCT case when "ReturnFlag" = 1 then "OrderID" end) as return_count
from "Customer"
group by "CustomerID";