Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当使用case语句在红移中聚合字段时,用1和0替换二进制字段是否更有效?_Sql_Amazon Redshift - Fatal编程技术网

Sql 当使用case语句在红移中聚合字段时,用1和0替换二进制字段是否更有效?

Sql 当使用case语句在红移中聚合字段时,用1和0替换二进制字段是否更有效?,sql,amazon-redshift,Sql,Amazon Redshift,例如,以下哪项计算应该执行得更快 sum ( case when fieldA is not null then 1 else 0 end ) total 或 在本例中,假设fieldA不为null时,fieldB将始终等于1。如果fieldA为null,则fieldB也可以等于1,这就是我使用case语句的原因。这两个查询不会做相同的事情,除非fieldB一致地1(或者fieldA不null时一致地1)。一般来说,您应该运行

例如,以下哪项计算应该执行得更快

sum ( 
    case 
        when fieldA is not null
        then 1
        else 0
    end ) total


在本例中,假设fieldA不为null时,fieldB将始终等于1。如果fieldA为null,则fieldB也可以等于1,这就是我使用case语句的原因。

这两个查询不会做相同的事情,除非
fieldB
一致地
1
(或者
fieldA
null
时一致地
1
)。一般来说,您应该运行真正需要的查询

Redshift是一个列数据库。这意味着查询中使用的每一列都会增加执行的开销

因此,如果可以,最好避免阅读专栏。当然,如果该列在查询中的其他位置被引用,则这不适用


此外,
SUM()
对数字进行操作。我不确定“binary”是否意味着该值是一个数字。如果不是,则需要转换,这也会增加开销。

这两个查询的作用不同,除非
fieldB
一致地
1
(或者
fieldA
NULL
时一致地
1
)。一般来说,您应该运行真正需要的查询

Redshift是一个列数据库。这意味着查询中使用的每一列都会增加执行的开销

因此,如果可以,最好避免阅读专栏。当然,如果该列在查询中的其他位置被引用,则这不适用


此外,
SUM()
对数字进行操作。我不确定“binary”是否意味着该值是一个数字。如果没有,则需要转换,这也会增加开销。

我强烈希望第一个变量的性能更好,因为它不需要访问第二列。

我强烈希望第一个变量的性能更好,因为它不需要访问第二列。

引用一列应该比引用两列更有效。SUM(二进制)有效吗?@jarlh SUM(二进制)无效,因为即使fieldA为null,fieldB也可以等于1。在本例中,如果fieldA不为null,我只想计算fieldB。@GordonLinoff这也是我的假设,但我希望得到更详细的答案。非常感谢。引用一列应该比引用两列更有效。SUM(二进制)有效吗?@jarlh SUM(二进制)无效,因为即使fieldA为null,fieldB也可以等于1。在本例中,如果fieldA不为null,我只想计算fieldB。@GordonLinoff这也是我的假设,但我希望得到更详细的答案。非常感谢。
sum ( 
    case 
        when fieldA is not null
        then fieldB -- binary field, 1 or 0. 
    end ) total