我正在尝试确定数据库中特定错误的普遍程度。我正在将一个字段与另一个字段进行比较,当该字段大于另一个字段时,我希望它对其进行计数。我也通过不同的陈述将其分组。该查询的目的是确定一个价格字段大于另一个价格字段时我数据库中的情况。
查询中引起问题的部分是select语句中的“ COUNT(CASE,当p.IMAP> p.MSRP = 1 ELSE NULL END时)”。我在它周围放了两个小星星,希望能帮助突出显示它的位置。
select b.brandName, b.BrandCode, p.ProductVendorStockNumber, **COUNT(Case When p.IMAP > p.MSRP = 1 ELSE NULL END) as 'Count'**
from products p
join brands b on p.brandID = b.brandID
where b.assignedTo = 'Steve' and p.IMAP > p.MSRP and status = 1
GROUP BY b.BrandName
答案 0 :(得分:2)
对于计数值,当条件为true时,您可以使用sum而不是count加1;否则为count
在用于聚合的sql中,不建议使用不用于聚合功能且未在group by中提及的列的选择,在最新版本的mmysql中不允许使用,对于较旧的版本,这些值的结果不可预测,因此您应该在“分组”的“然后”列中,您在选择中没有聚合功能,例如:
select b.brandName
, b.BrandCode
, p.ProductVendorStockNumber
,sum(Case When p.IMAP > p.MSRP THEN 1 ELSE 0 END) as my_count
from products p
join brands b on p.brandID = b.brandID
where b.assignedTo = 'Steve' and p.IMAP > p.MSRP and status = 1
GROUP BY b.BrandName, b.BrandCode, p.ProductVendorStockNumber
或使用没有聚合的行和右聚合行上的联接
过滤结果