我想了解DISTINCT
之间的行为:
COUNT(DISTINCT t1.id, t1.surcharge_value) AS surcharge_case,
和
COUNT(
DISTINCT (
CASE WHEN t1.surcharge_value != '0.00' THEN CONCAT(t1.id,"_",t1.surcharge_value) END
)
) AS surcharge_case,
第一个查询是否使用它自己的CONCAT
,所以它最终会像这样。例如:id
是1
,surcharge_value
是5.00
;所以它成为15.00
?
如果我从第二个查询中删除下划线; CONCAT
会像第一个查询一样吗?
提前致谢。
第一个计算元组t1.id,t1.surcharge_value的distinct(非null)值
仅当条件WHEN t1.surcharge_value!='0.00'为TRUE时,第二个才计算distinct(非null)值,因为在这种情况下返回一个字符串 在其他情况下返回null并且不计算此值
在你的样本中,第一个retunr 1(不同的1,5.00)意味着行的数字,而元组不为空在第二个你检查一个字符串和一个数字5.00!='0.00'在这种情况下总是!=和 第二次返回1,因为CONCAT(t1.id,“_”,t1.surcharge_value)始终为NOT NULL的值独立
但是对于值(1,5.00),(1,0.00)
第一次返回2次,第二次返回1次
只有当additional_value的任何值为!=来自'0.00'时,删除“_”才会产生相同的结果