Estoy calculando valores de razonez usando SQL y tengo el problema de las divisiones por zero y tener que volver a calcular el denominador. Me explico, ejemploSELECT ID,f_idagente ( SELECT count(s.f_id) AS xsell2 FROM dcg.t_sys_disposicion d, dcg.t_sys_calls s WHERE s.f_disposicion = d.f_id AND s.f_horastart::date >= $1 and s.f_horastart::date<=$2 and d.f_id IN(32,33,35,36,40,42,43,44) and s.f_agente=f_idagente ) / ( SELECT count(s.f_id) AS coreoffert FROM dcg.t_sys_disposicion d, dcg.t_sys_calls s WHERE s.f_disposicion = d.f_id AND s.f_horastart::date >= $1 and s.f_horastart::date<=$2 and d.f_id IN(30,31,32,33,38,41,42,43) and s.f_agente=f_idagente ) FROM TABLA;
En este select si quisiera evaluar antes de calcular si el denominador =0 tendria que volver hacerlo y usar una clausula CASE ...WHEN para comprobar. Mi pregunta es no existe otra forma mas simple de poder hacer la validacion sin tener que volver a repetir todo el select y tener que poner el CASE ...WHEN porque me complica demasiado el codigo ?
La otra forma que pense es de calcular en funciones cada razon que estoy calculando y en la funcion hacer todo solo retornar 0 o el valor calculado pero no me gusta mucho la idea porque deberia hacer 10 funciones que son las razones que calculo, imaginense, por otro lado, 10 razones como estas ademas de la validacion de si el denominador es 0 seria kilometrico el SELECT en cuestion, existe algun truco para esto y yo no me lo se ?
Si uso funciones el plan de ejecucion no se ve afectado ?
Gracias