在日常业务SQL中我们会涉及到时间排序,有些业务场景会根据各个时间字段值来做判断非空来排序。例如:
A时间优先:按照A时间降序排序
B时间优先:按照B时间降序排序,无B时间再按照A时间降序排序
C时间优先:按照C时间降序排序,无C时间再按照B时间降序,无B时间再按照A时间降序。
示例:ORDER BY IFNULL(IFNULL(C,B),A) DESC
但是在实际场景查询中SQL内置在计算的时候这样运行效率很差。所以我们可以考虑用另外一个函数代替
COALESCE:返回参数中的第一个非空表达式(从左向右依次类推);
select coalesce(null,2,3); // Return 2 select coalesce(null,null,3); // Return 3 select coalesce(1,2,3); // Return 1
上面的ORDER BY排序可以改为COALESCE(C,B,A)
假如某个字段默认是null,你想其返回的不是null,而是比如0或其他值,也可以使用这个函数 COALESCE(字段名,0) as value