I saw this answer how do I select AVG of multiple columns on a single row but I have some rows which is the value is 0 and it’s throwing an error division by zero
when I try to use his
x
select (COALESCE(q1,0)+COALESCE(q2,0)+COALESCE(q3,0)+COALESCE(q4,0) / (COALESCE(q1/q1,0)+COALESCE(q2/q2,0)+COALESCE(q3/q3,0)+COALESCE(q4/q4,0) from table1
ex.
q1 q2 q3 q4
10 5 NULL 0
8 5 5 NULL
5 5 5 5
--------------
7.5
6
5
Advertisement
Answer
In order to resolve the task, you can use CASE
expression because you cannot divide by zero:
SELECT (COALESCE(q1,0) + COALESCE(q2,0) + COALESCE(q3,0) + COALESCE(q4,0)) / COALESCE((COALESCE(q1/(CASE WHEN q1 is null or q1= 0 then 1 else q1 end),0) + COALESCE(q2/(CASE WHEN q2 is null or q2 = 0 then 1 else q2 end),0) + COALESCE(q3/(CASE WHEN q3 is null or q3 = 0 then 1 else q3 end),0) + COALESCE(q4/(CASE WHEN q4 is null or q4 = 0 then 1 else q4 end),0)),1)
FROM table1
It is added extra COALESCE
because the sum of the divisor can be zero as well