最近写SQL的过程中,学习到一个非常有用的函数:coalesce。特别是在做统计的时候,这个函数作为条件可以兼顾到一些特殊情况。这里做一下总结和分享。
和if(条件,值,值)差不多
- 用途:
(1):将控制替换成其他值;
(2):返回第一个非空值
- 表达式
COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表达式最终将返回空值。
- SQL实例
select coalesce(success_cnt, 1) from tableA
当success_cnt 为null值的时候,将返回1,否则将返回success_cnt的真实值。
select coalesce(success_cnt,period,1) from tableA
当success_cnt不为null,那么无论period是否为null,都将返回success_cnt的真实值(因为success_cnt是第一个参数),当success_cnt为null,而period不为null的时候,返回period的真实值。只有当success_cnt和period均为null的时候,将返回1。
SELECT
c.product_code productCode,
c.round,
c.`name` roundNameCn,
c.is_cost_inclusive costInclusive,
c.default_quantity quantity,
c.max_quantity maxQuantity,
c.min_quantity minQuantity,
CASE
WHEN c.round_type = 1 THEN
0
WHEN c.round_type = 5 THEN
1
END isChoices,
c.composition_code itemProductCode,
IF(
c.default_product_code IS NULL || LENGTH(trim(c.default_product_code)) = 0,
i.item_product_code,
c.default_product_code
) defaultProductCode
FROM
t_product_combo_composition c
LEFT JOIN t_product_choice_item i ON c.data_version = i.data_version
AND c.composition_code = i.choice_code
AND is_default = 1
WHERE
c.data_version = #{dataVersion}
</select>