【发布时间】:2020-03-11 18:10:58
【问题描述】:
以下是 POS 系统中的不同比例。我正在尝试计算不是“MANUAL WT”的不同比例的数量。
这就是我所拥有的,但它返回 2 而不是 6。 count (distinct (d.SCALE_IN_ID != 'MANUAL WT' then 1 else 0 end)) as Num_Scale
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
以下是 POS 系统中的不同比例。我正在尝试计算不是“MANUAL WT”的不同比例的数量。
这就是我所拥有的,但它返回 2 而不是 6。 count (distinct (d.SCALE_IN_ID != 'MANUAL WT' then 1 else 0 end)) as Num_Scale
【问题讨论】:
考虑:
select count(distinct case when scale_in_id <> 'MANUAL WT' then scale_in_id end) cnt
from mytable
原始查询的问题是case 表达式将值转换为0 和1,然后聚合函数计算返回了多少不同的值:因为值都是0s 或1s,只有两个不同的值(或边缘情况下的一个):因此您得到的结果。
【讨论】:
一个简单的WHERE 子句就可以了:
select count(distinct scale_in_id) Num_Scale
from tablename
where scale_in_id <> 'MANUAL WT'
【讨论】: