【问题标题】:Coalesce for zero instead of null合并为零而不是 null
【发布时间】:2019-09-18 16:00:52
【问题描述】:

我有一个简单的公司表,它不一致地使用列名 turnoverrevenue。该表目前如下所示:

company, turnover, revenue
A, 10000, 0
B, 0, 2500
C, 0, 3000
4, 23000, 0

我知道如何使用 coalesce 在 null 和 value 之间进行选择,但是要丢弃的值是零而不是 null。

我想要的最终结果是:

company, revenue
A, 10000
B, 2500
C, 3000
D, 23000

我想象的查询是:

select company, coalesce_for_zero(turnover, revenue) as revenue from
company_profile;

我如何编写一个查询,以实现类似合并的结果为零?

【问题讨论】:

  • 没有零合并。您需要写一个CASE 来执行此操作。
  • 如果你的值总是正数,你可以只使用greatest(turnover, revenue) - 它不会首先取非零值,但结果会
  • @VaoTsun: GREATEST 返回其参数的最大值。所以GREATEST(1, 2) 会返回错误的结果。
  • 啊,当然-我认为它可能是零或数字:)这里早上太早了

标签: postgresql


【解决方案1】:

您可以将NULLIFCOALESCE 结合使用:

SELECT company, COALESCE(NULLIF(turnover, 0), revenue) AS revenue FROM company_profile;

NULLIF 如果参数相等则返回NULL,否则返回第一个参数。

【讨论】:

  • 你甚至可以合并任意数量的无效化,谢谢,救了我!
【解决方案2】:

你可以用0作为参数合并

coalesce(turnover, revenue, 0) 

【讨论】:

  • 我相信这不是 OP 想要的,如果 turnoverrevenue 为空,这将返回 0,但如果它们为 0,我们想这样做。
猜你喜欢
  • 1970-01-01
  • 2021-09-13
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
相关资源
最近更新 更多