MySQL coalesce、case when、multiIf…的学习和使用
select
    coalesce(count(multiIf(t.is_in_stock='是',1,null)),0) as value_1,
    coalesce(count(multiIf(t.is_in_stock='是',null,1)),0) as value_0,
    coalesce(round(count(1),2),0)  as  total
from (
    select so_name,default_code,is_in_stock
    from table_name apcrd where ( apcrd.is_office_platform!='是' or apcrd.is_in_stock != '否' )
    group by so_name,default_code,is_in_stock
) as t
select
    coalesce(sum(case when t.is_supplier_union_stock_sku = '是' then 1 else 0 end), 0) as union_stock_count,
    coalesce(sum(case when t.is_supplier_union_stock_sku = '否' and t.is_in_stock = '是' then 1 else 0 end), 0) as value_1,
    coalesce(sum(case when t.is_supplier_union_stock_sku = '否' and t.is_in_stock = '否' then 1 else 0 end), 0) as value_0,
    coalesce(count(1), 0) as total
from (
    select so_name,default_code,is_in_stock,is_supplier_union_stock_sku 
    from table_name apcrd
    where ( apcrd.is_office_platform!='是' or apcrd.is_in_stock != '否' )
    group by so_name,default_code,is_in_stock,is_supplier_union_stock_sku
) as t

coalesce

coalesce 函数用于返回第一个非 NULL 的表达式的值,这里使用的目的是确保聚合函数的结果为空时返回 0

multiIf

multiIf 函数并不是标准 SQL 语言的一部分,但它在某些数据库系统中可用,比如 ClickHouse。multiIf 函数允许你在单个表达式中评估多个条件,并返回第一个匹配条件的结果。这类似于 CASE WHEN 语句,但它的语法更简洁。

multiIf(condition1, result1, condition2, result2, ..., default_result)
  • condition1, condition2, ... 是布尔表达式(即返回 truefalse 的表达式)。
  • result1, result2, ... 是当对应的条件为 true 时返回的结果。
  • default_result 是当所有条件都为 false 时返回的默认结果。

case when

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    [ELSE resultN]
END

最后的 ELSE 子句是可选的,用于指定当没有一个 WHEN 条件满足时返回的结果


了解 王坤的博客 的更多信息

订阅后即可通过电子邮件收到最新文章。

作者:kenney wang
暂无评论

发送评论 编辑评论


				
上一篇
下一篇

了解 王坤的博客 的更多信息

立即订阅以继续阅读并访问完整档案。

继续阅读