什么时候在postgresql查询中使用COALESCE函数?

时间:2011-10-17 07:56:13

标签: sql coalesce

我搜索了很多,但没有找到可解答的问题。有趣的是,我什么时候必须在查询中使用COALESCE函数。提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

当您想要“列”的第一个非NULL值时(此意义上的列意味着在您的查询输出中,而不是您的表)。

一个例子可能是公司的联系人。假设您有三列:

CompanyRep
CompanySecretary
CompanyOwner

你要存储这三个。但是,在一个让您知道应该联系谁的查询中,您希望按照给定的顺序提供其中一个。但是它们中的任何一个或全部都可能是NULL。

查询:

select coalesce (CompanyRep, CompanySecretary, CompanyOwner, '???') as contact
from blah blah blah

会给你你想要的价值。它将为您提供它找到的非NULL的第一个值。如果所有可能的表列都是NULL,那么你将获得'???',因为那显然不是 NULL。


另一个例子,假设您有一个会计数据库,其中包含单独的借记和贷记价值列 - 请不要介意这通常是a bad design,并且您应该有一个带有符号的列 - 让我们假设它已设置会计知识少于我的人: - )

所以,如果你想总结所有交易以确保信用和借方相等,你可以使用类似的东西:

select sum (coalesce (credit, -debit, 0)) from txns ...

这样,如果它不是NULL,它将选择信用值,否则它将选择借方值的否定(所有值都是正数)。如果它们都是NULL,它将给你零。

当他们非NULL 时会发生什么?我听到你问。嗯,这就是为什么它是一个糟糕的设计: - )