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