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, ...是布尔表达式(即返回true或false的表达式)。result1, result2, ...是当对应的条件为true时返回的结果。default_result是当所有条件都为false时返回的默认结果。
case when
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
[ELSE resultN]
END
最后的 ELSE 子句是可选的,用于指定当没有一个 WHEN 条件满足时返回的结果
了解 王坤的博客 的更多信息
订阅后即可通过电子邮件收到最新文章。