Ruby on rails Rails:使用postgres防止被零除
我有一个带有postgre数据库的rails应用程序,我正试图通过以下语句获取一些指标Ruby on rails Rails:使用postgres防止被零除,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我有一个带有postgre数据库的rails应用程序,我正试图通过以下语句获取一些指标 Negotiation.find(:all, :conditions => conditions_hash('negotiation'), :select => 'sum(payment_term * amount_after_annualised_base) / sum(amount_after_annualised_base) as pt').first 我如何确保总和(金额在年化基数之后)
Negotiation.find(:all, :conditions => conditions_hash('negotiation'), :select => 'sum(payment_term * amount_after_annualised_base) / sum(amount_after_annualised_base) as pt').first
我如何确保总和(金额在年化基数之后)不是0(因此不会抛出“零除”错误)
我发现了这个,但不确定它是否正确/最佳/最有效
Negotiation.find(:all, :conditions => conditions_hash('negotiation'), :select => 'sum(payment_term * amount_after_annualised_base) / (CASE sum(amount_after_annualised_base) WHEN 0 THEN NULL ELSE sum(amount_after_annualised_base) END) as pt').first
谢谢!
皮埃尔怎么样:
Negotiation.find(:all,
:conditions => conditions_hash('negotiation'),
:select => 'sum(amount_after_annualised_base) sum_amount,
sum(payment_term * amount_after_annualised_base) / greatest(1,sum_amount) as pt').first
如果总和为零,请输入代码。如何:
Negotiation.find(:all,
:conditions => conditions_hash('negotiation'),
:select => 'sum(amount_after_annualised_base) sum_amount,
sum(payment_term * amount_after_annualised_base) / greatest(1,sum_amount) as pt').first
如果总和为零,请输入代码。使用:
这仅仅是您的解决方案的一个简写:
Negotiation.find(:all, :conditions => conditions_hash('negotiation'), :select => 'sum(payment_term * amount_after_annualised_base) / (CASE sum(amount_after_annualised_base) WHEN 0 THEN NULL ELSE sum(amount_after_annualised_base) END) as pt').first
使用:
这仅仅是您的解决方案的一个简写:
Negotiation.find(:all, :conditions => conditions_hash('negotiation'), :select => 'sum(payment_term * amount_after_annualised_base) / (CASE sum(amount_after_annualised_base) WHEN 0 THEN NULL ELSE sum(amount_after_annualised_base) END) as pt').first
我想你需要写一些类似的东西
Negotiation.find(
:all, :conditions => conditions_hash('negotiation'),
:select => 'CASE sum(amount_after_annualised_base) WHEN 0 THEN NULL ELSE sum(payment_term * amount_after_annualised_base) / sum(amount_after_annualised_base) END as pt').first
如果
总和(年化基数后的金额)
为零,则返回NULL,否则将执行请求的除法。我认为您需要编写以下内容
Negotiation.find(
:all, :conditions => conditions_hash('negotiation'),
:select => 'CASE sum(amount_after_annualised_base) WHEN 0 THEN NULL ELSE sum(payment_term * amount_after_annualised_base) / sum(amount_after_annualised_base) END as pt').first
如果
总和(年化基数后的金额)
为零,则返回NULL,否则请求的除法无效。这是否有效?因为你在任何情况下都会尝试除法,这样行吗?因为你在所有情况下都会尝试除法。很好,使用最大值(1,总和)是最酷的方法。谢谢。很好,使用最大的(1,总和)是最酷的方式。谢谢