分享

巨坑!10000-null 竟然等于null

 爱开发 2023-03-13 发布于广东

在比较两个时间段收入时,发现有的值都是null,查看了sql没有发现问题。

后来才得知这是Presto的一个规则。

当比较两个时间段收入时,如果其中一个时间段的值为null,则比较结果也会是null。这是因为在Presto中,如果一个数值类型的表达式中包含了null值,则整个表达式的结果也会是null。

这是Presto的一种设计方式,在很多情况下可以避免一些常见的错误和问题。因此,如果在Presto中执行类似于10000-null这样的表达式,其结果确实会是null。

如果需要将null值转换为其他值,可以使用COALESCE函数来实现。例如,COALESCE(10000-null, 0)的结果将会是10000,表示如果表达式的值为null,则返回0。

需要注意的是,在Presto中,null值的比较和处理需要格外小心,因为它们可能会导致不符合预期的结果。因此,在编写Presto查询时,应该格外注意null值的处理。

在编写Presto查询时,需要注意以下几点:

避免使用SELECT *语句:使用SELECT *语句会返回所有列的数据,这可能会导致查询的效率较低,且容易出现不必要的错误。应该明确指定需要查询的列。

使用JOIN时,注意表之间的关联条件:如果JOIN的表之间没有指定合适的关联条件,会导致查询效率低下或者结果不准确。在JOIN时应该明确指定表之间的关联条件。

避免使用子查询和嵌套查询:子查询和嵌套查询可能会导致查询效率低下,应该尽量避免使用。可以考虑使用JOIN或UNION等语句来替代子查询。

处理null值时要小心:在Presto中,null值的比较和处理需要格外小心,因为它们可能会导致不符合预期的结果。应该特别注意null值的处理。

尽量避免使用ORDER BY语句:ORDER BY语句会对查询结果进行排序,这可能会导致查询效率较低。如果需要排序,可以考虑在数据导入时进行排序,或者使用其他工具进行排序。

使用LIMIT语句时,应该明确指定排序规则:如果使用LIMIT语句来限制查询结果的数量,应该明确指定排序规则,否则查询结果可能会不准确。

以上是编写Presto查询时需要注意的一些方面,当然还有很多其他的细节需要注意。

所以,在编写Presto查询时,应该仔细考虑每一步操作的影响和可能的问题,以确保查询结果的准确性和查询效率的高效性。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多