我有一个问题:
MySQL: Sum values in subqueries
我有一个较大的where部分进行一些过滤,然后在我做不同的类别时想在select部分进行过滤。
我的情况不同之处在于我需要使用不同的使用情况计数而不是总和:您有多个订单并希望计算特定产品的订单数量(除了返回一堆其他聚合在其他条件)。但是,由于技术问题,订单系统有时会创建两个几乎相同的行,这些行具有相同的ProductID和相同的OrderID(其他列将略有不同,例如订单时间)。但是,您只想计算特定产品的不同订单的数量(例如,每个唯一订单ID仅+1)。但是对于某些其他聚合,您需要使用重复条目,因此您必须在select部分中使用case子查询进行计数。
我创建了一个几乎适用于此sample database的查询:
SELECT COUNT(ProductID)
, COUNT(CASE WHEN ProductID = 51 THEN DISTINCT OrderDetailID END)
FROM OrderDetails
然而,它抱怨语法错误。一旦我删除'DISTINCT'它就可以正常工作,但是这会导致重复计算(虽然样本数据库中不存在,但我的存在)这就是我需要'DISTINCT'工作的原因
答案 0 :(得分:2)
您的查询非常接近。您只需要在distinct
之前移动case
:
SELECT COUNT(ProductID),
COUNT(DISTINCT CASE WHEN ProductID = 51 THEN OrderDetailID END)
FROM OrderDetails
答案 1 :(得分:0)
我会尝试这样的事情
select count(productid)
, case when productid = 51 then count(distinct orderdetailid)
else some other number end
from orderdetails