coalesce
COALESCE是一个函数,coalesce (expression_1, expression_2, …,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。
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。
with rollup
with在sql语句中定义在group by之后。当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总。不过这个cube在mysql中并不适用。
使用 WITH ROLLUP,此函数是对聚合函数进行求和,注意 with rollup是对 group by 后的第一个字段,进行分组计算。
当使用WITH ROLLUP子句时,查询的GROUP BY子句中的每个列都会生成一个额外的行,表示当前列的汇总值。这些汇总行按照GROUP BY子句中列的顺序进行排序,且每个汇总行都会提供该列的聚合值。
这个功能非常有用,可以方便地将分组数据的汇总值显示在查询结果中,而不需要执行额外的聚合查询。下面是一个示例来说明WITH ROLLUP的作用:
假设我们有一个销售表sales,包含product、category和quantity三个列。我们希望计算每个产品在每个类别中的销售总量,并在结果中包括类别和总计行。
使用WITH ROLLUP,我们可以编写以下查询:
SELECT category, product, SUM(quantity)
FROM sales
GROUP BY category, product WITH ROLLUP;
这个查询将生成包含以下行的结果:
category | product | SUM(quantity)
---------+----------+---------------
Cat1 | Prod1 | 10
Cat1 | Prod2 | 5
Cat1 | NULL | 15 -- Cat1的总销售量
Cat2 | Prod3 | 8
Cat2 | Prod4 | 12
Cat2 | NULL | 20 -- Cat2的总销售量
NULL | NULL | 35 -- 所有类别的总销售量
在结果中,每个类别的每个产品都显示了其对应的销售量。NULL值表示汇总行,显示了当前类别或所有类别的销售总量。
通过使用WITH ROLLUP,我们可以方便地在查询结果中生成汇总行,实现数据的汇总和分组计算。