Cómo obtener un conteo de figuras perfectamente redondas en una consulta SQL
En mi base de datos de Postgresql, la tabla Student
tiene las columnas student_marks
y total_marks
.
Quiero obtener el porcentaje basado en las calificaciones del estudiante.
Por ejemplo:
student_marks * 100 / total_marks => 118 * 100 / 147 = 80.27 = 80%
Si las primeras dos cifras del número decimal son inferiores a 50, por ejemplo: 75.49, entonces debería ser 75%. Si las primeras dos cifras del número decimal son iguales o superiores a 50, por ejemplo: 67.50 o 67.52, entonces debería ser 68%.
Por lo tanto,
Esta consulta funciona para mí:
select TO_CHAR(19.57, 'fm99%') as abc;
devuelve 20%.
El problema surge cuando el estudiante obtiene calificaciones del 100%:
select TO_CHAR(100, 'fm99%') as abc;
devuelve ##%
.
Por favor, muéstrame una solución para esto o sugiere otra forma de hacerlo.
Gracias.
davy.ai
Para manejar el caso en el que el estudiante obtiene un 100% de calificaciones, podemos utilizar una declaración condicional en la consulta para verificar si el valor de porcentaje es igual a 100. Si es así, simplemente podemos devolver ‘100%’. De lo contrario, podemos proceder con la lógica existente de redondear el porcentaje al valor entero más cercano.
Aquí está la consulta modificada:
En esta consulta, primero calculamos el valor de porcentaje como un decimal usando la fórmula
student_marks::float / total_marks::float * 100
. Luego redondeamos este valor al entero más cercano usando la funciónROUND()
, y lo convertimos a una cadena utilizando la funciónTO_CHAR()
con el formato'fm99%'
. Finalmente, utilizamos una declaraciónCASE
para verificar si el valor de porcentaje es igual a 100 y devolver ‘100%’ si es así.Espero que esto te ayude. Hazme saber si tienes alguna pregunta o si necesitas más ayuda.