何时在postresql查询中使用合并函数?

何时在postresql查询中使用合并函数?,sql,coalesce,Sql,Coalesce,我在谷歌上搜索了很多,但没有找到我的问题可以理解的答案。有趣的是,我什么时候必须在查询中使用合并函数。提前感谢您的回答。当您需要“列”的第一个非空值时(从这个意义上说,列是指查询输出中的列,而不是表中的列) 一个例子可能是公司的联系人。假设您有三列: CompanyRep CompanySecretary CompanyOwner 你想把这三个都储存起来。但是,在一个让您知道应该联系谁的查询中,您希望按照给定的顺序交付其中一个。但它们中的任何一个或所有可能都是空的 查询: select coa

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

当您需要“列”的第一个非空值时(从这个意义上说,列是指查询输出中的列,而不是表中的列)

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

CompanyRep
CompanySecretary
CompanyOwner
你想把这三个都储存起来。但是,在一个让您知道应该联系谁的查询中,您希望按照给定的顺序交付其中一个。但它们中的任何一个或所有可能都是空的

查询:

select coalesce (CompanyRep, CompanySecretary, CompanyOwner, '???') as contact
from blah blah blah
会给你想要的价值。它将为您提供它找到的第一个非空值。如果所有可能的表列都为NULL,那么您将得到
“???”
,因为这显然不是NULL


另一个例子,假设您有一个会计数据库,它有单独的借方和贷方值列-不要介意这通常是,您应该有一个带有符号的列-让我们假设它是由一个会计知识比我少的人建立的:-)

因此,如果您想对所有交易进行汇总,以确保贷项和借项相等,您可以使用以下方法:

select sum (coalesce (credit, -debit, 0)) from txns ...
这样,如果贷方值不为空,它将选择贷方值,否则它将选择借方值的负数(所有值均为正数)。如果它们都是空的,它会给你零

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