我需要在postgres中执行此查询,但我无法摆脱此错误
ERROR: division by zero
SQL state: 22012
Run Code Online (Sandbox Code Playgroud)
这是查询:
select id,rates_sum,rates_count from tbl_node order by rates_sum/rates_count DESC;
Run Code Online (Sandbox Code Playgroud)
我知道我可以添加一个小值,rates_count但我得到不准确的值.
有没有办法让postgres忽略这个错误,或使用if语句来检查零并用任何数字替换它们.再次按顺序by子句中的错误.
谢谢
我已经在这个主题上搜索了不同的问题,但没有明确的想法.检查此代码:
class Test{
public static void main(String[] s){
int a=5;
float b=(float)a/0;
System.out.print(b);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是Infinity.但我没有得到的东西a是int和a/0必须抛出异常.那怎么能显示输出Infinity呢?
如果我输入:
int main() { return 0 % 0; }
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误:
error C2124: divide or mod by zero
Run Code Online (Sandbox Code Playgroud)
这背后的原因是什么?答案不是零吗?
我是SQL的新手,可以用手.我在SELECT语句中得到以下错误:
SUM(Cast((replace(replace(replace (p.[Total Sales], '$', ''), '(','-'), ')','')) as money)) - SUM(Cast((replace(replace(replace (p.[Total Cost], '$', ''), '(','-'), ')','')) as money)) / SUM(Cast((replace(replace(replace (p.[Total Sales], '$', ''), '(','-'), ')','')) as money)) as new_bal
Run Code Online (Sandbox Code Playgroud)
我知道我需要使用CASE,但我不确定应用程序.
给出了一个简单的矩阵 - 矩阵元素划分功能.但是,运行int8和int16版本会返回整数除以来自valgrind的0错误,以及来自命令行的seg错误.int32,spfp和dpfp函数,我确保除了类型声明之外是相同的文本,没有这个问题.矩阵中的值随rand()函数随机生成.为什么只有部分返回除以0错误?
第一功能
double matrix_matrix_div_elementwise_int8(int size,int threads)
{
//initialize index variables, random number generator, and timer
int i;
int size2D=size*size;
srand(SEED);
struct TIME_STRUCT start,end;
//allocate memory for matrices
INT8_TYPE *A=malloc(sizeof(INT8_TYPE)*(size*size));
INT8_TYPE *B=malloc(sizeof(INT8_TYPE)*(size*size));
INT8_TYPE *C=malloc(sizeof(INT8_TYPE)*(size*size));
//initialize input matrices to random numbers
//initialize output matrix to zeros
for(i=0;i<(size*size);i++)
{
A[i]=rand();
B[i]=rand();
C[i]=0;
}
//serial operation
if(threads==1)
{
//start timer
TIME_GET(&start);
//computation
for(i=0;i<size2D;i++)
{
C[i]=A[i]/B[i];
}
//end timer
TIME_GET(&end);
}
//parallel operation
else
{
//start timer
TIME_GET(&start);
//parallelize with OpenMP
#pragma omp …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么除以0会在以下两种情况下给出不同的结果.
amort是一个计算常量摊销计划的函数.我们现在唯一关心的是A的最后一个元素正好是0.
amort = @(r,M) ((1+r).^(0:M)' - (1+r).^M) ./ (1-(1+r).^M)
A = amort(0.03, 20);
>> A(end)==0
ans =
1
Run Code Online (Sandbox Code Playgroud)
看起来很奇怪的是:
>> 1/0
ans =
Inf
>> 1/A(end)
ans =
-Inf
Run Code Online (Sandbox Code Playgroud)
然而
>> sign(A(end))
ans =
0
>> 1/abs(A(end))
ans =
Inf
Run Code Online (Sandbox Code Playgroud)
这怎么可能,为什么?有某种隐藏的"标志"吗?
我有以下数据:
a = pd.Series([1, 2, 3])
b = pd.Series([0, 0, 0])
Run Code Online (Sandbox Code Playgroud)
如果被零除,在某些情况下我想
但是以下给出了“意外”结果:
a.div(b, fill_value = 0)
0 inf
1 inf
2 inf
a.div(b).fillna(0)
0 inf
1 inf
2 inf
a.div(b).combine_first(a)
0 inf
1 inf
2 inf
Run Code Online (Sandbox Code Playgroud)
我想到达:
情况1:将数据设置为特定值
0 0
1 0
2 0
Run Code Online (Sandbox Code Playgroud)
情况2:将值设置为特定的序列
0 1
1 2
2 3
Run Code Online (Sandbox Code Playgroud) 我用这段代码得到0除错:
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1 * INT2 / DENOMINATOR)
ELSE 0
END AS RATIO
Run Code Online (Sandbox Code Playgroud)
但是,当我更改为以下代码时,它工作正常.
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1) * INT2 / DENOMINATOR
ELSE 0
END AS RATIO
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解原因,以便将来可以避免这种情况吗?BTW,第一个样本在Vertica中运行.我实现了总结需要求和的东西而不是在求和之前进行计算是一种更好的编程实践.不过仍然很好奇.
最初我将变量 x 和 y 声明为 int 类型:
#include<stdio.h>
int main(){
int x, y = 0 ;
x = 1 / y;
printf("%d", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序崩溃(原因很明显)。
现在我将变量 x 和 y 声明为 double:
#include<stdio.h>
int main(){
double x, y = 0 ;
x = 1 / y;
printf("%d", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是输出:0。(为什么?)
然后我在 printf 中将 %d 更改为 %f:
#include<stdio.h>
int main(){
double x, y = 0 ;
x = 1 / y;
printf("%f", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:1.#INF00
我不明白这里发生了什么。 …
SQL和开发新手,我有一个包含字段(索引、名称、人口、区域)的表(国家/地区)通常我添加一个客户端(Delphi)计算字段(DENSITY)和 OnCalcField :
COUNTRIES.DENSITY=COUNTRIES.POPULATION / COUNTRIES.AREA
Run Code Online (Sandbox Code Playgroud)
尝试更改为 Firebird 计算字段以在服务器端完成所有计算,我创建了一个名为密度的字段,并在 IBEXPERT“计算源”列中:
ADD DENSITY COMPUTED BY ((((COUNTRIES.POPULATION/COUNTRIES.AREA))))
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当 Record.AREA = 0 我有一个除以零错误。
我的问题是如何避免这种情况,例如使用 IF THEN 条件来避免在除法器为 0 时计算字段或在这种情况下使结果仅为 =0。
我的环境:Delphi RIO、Firebird 3.0、IBExpert