es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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:

    SELECT CASE 
             WHEN student_marks::float / total_marks::float = 1 
             THEN '100%' 
             ELSE TO_CHAR(CAST(ROUND(student_marks::float / total_marks::float * 100) AS INTEGER), 'fm99%') 
           END AS porcentaje 
    FROM Student;
    

    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ón ROUND(), y lo convertimos a una cadena utilizando la función TO_CHAR() con el formato 'fm99%'. Finalmente, utilizamos una declaración CASE 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.

Comments are closed.