Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何计算同一订单id的订单数量和退货数量?_Sql - Fatal编程技术网

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