CASE WHEN THEN NULL值如何处理

时间:2019-04-29 10:23:20

标签: sql apache-spark

假设我在Spark上执行的SELECT子句中有以下代码:

...
MEAN(CASE
         WHEN (col1 = 'A'
               AND (col3 = 'A' OR col4 = 'B')) THEN col2
     END) AS testing,
...

col2NULL时,此查询的输出是什么? col2=NULL函数会忽略包含MEAN的行吗?

3 个答案:

答案 0 :(得分:1)

结果将为NULL。它将具有col2类型-在某些数据库中(或将结果保存到表中),这可能很重要。

什么是MEAN()函数?要计算平均值,请使用AVG()。这是用于计算SQL平均值的标准函数。

答案 1 :(得分:1)

免责声明-不知道Apache Spark!

我创建了一个SQL提琴-http://sqlfiddle.com/#!9/6f7d5e/3

如果col2为null,则除非所有匹配记录均为null,否则它不包括在平均值中。

答案 2 :(得分:0)

我相信您的意思是AVG。它会忽略NULL值。因此,如果case表达式的结果是:

100
200
300
NULL

那么结果将是(100 + 200 + 300) / 3 = 200而不是(100 + 200 + 300) / 4。如果case表达式的结果是:

NULL
NULL
NULL
NULL

然后结果将为NULL而不是0。