在比较两个时间段收入时,发现有的值都是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查询时,应该仔细考虑每一步操作的影响和可能的问题,以确保查询结果的准确性和查询效率的高效性。 |
|