Cómo encontrar la puntuación media más alta en una clase

Estoy tratando de mostrar la puntuación media máxima en una clase; sin embargo, he estado luchando con la consulta durante horas y no parece que pueda conseguir que funcione.

Puedo conseguir una lista de las puntuaciones promedio de estudiantes para mostrar, con:

   public function GetSumAvgftScore($student_id, $session_id, $section_id, $class_id) 
    {
        $this->db->select_avg('ft_tot_score');
        $this->db->where('student_id', $student_id);
        $this->db->where('session_id', $session_id);
        $this->db->where('section_id', $section_id);
        $this->db->where('class_id', $class_id);
        return $this->db->get('ftscores_primary')->row(); 
    }

Sin embargo, me quedo atascado cuando intento mostrar la puntuación media más alta. Esto es lo que he intentado:

  public function GetHighestClassAvg($student_id, $session_id, $section_id, $class_id) 
    {
        $this->db->order_by('ft_tot_score', 'DESC');
        $this->db->select_max(avg('ft_tot_score'));
        $this->db->where('student_id', $student_id);
        $this->db->where('session_id', $session_id);
        $this->db->where('section_id', $section_id);
        $this->db->where('class_id', $class_id);
        $data = $this->db->get('ftscores_primary')->row(); 
    }

Esto no me da nada.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por debugdynamob312


3 Respuestas:

  • Prueba esto:

     function GetHighestClassAvg($student_id, $session_id, $section_id, $class_id) 
        {
            $this->db->order_by('ft_tot_score', 'DESC');
            $this->db->select_avg('ft_tot_score');
            $this->db->where('student_id', $student_id);
            $this->db->where('session_id', $session_id);
            $this->db->where('section_id', $section_id);
            $this->db->where('class_id', $class_id);
            $data = $this->db->get('ftscores_primary')->row(); 
        }
    

    Respondida el Dec 17, 2020 a las 16:44 - por logicluminary3c42

    Votos positivos: 0 | Votos negativos: 0

  • El problema en tu código para obtener la puntuación media más alta en una clase es que estás usando incorrectamente la función select_max() y la función avg().

    Para encontrar la puntuación media más alta en una clase, puedes hacer lo siguiente:

    php
    public function GetHighestClassAvg($session_id, $section_id, $class_id) 
    {
        $this->db->select_max('average_score');
        $this->db->where('session_id', $session_id);
        $this->db->where('section_id', $section_id);
        $this->db->where('class_id', $class_id);
        $query = $this->db->get('class_scores');
    
        if ($query->num_rows() > 0) {
            return $query->row()->average_score;
        } else {
            return 0; // o maneja el caso en el que no se encuentre ningún resultado
        }
    }
    

    En este ejemplo, estamos seleccionando el valor máximo de la columna average_score que estaría precalculada para cada clase con la puntuación promedio de todos los estudiantes. Asegúrate de que la tabla class_scores contenga la columna average_score que estás tratando de obtener.

    Además, en la consulta, solo necesitas los parámetros session_id, section_id y class_id para obtener la puntuación media más alta en una clase, por lo que el parámetro student_id no es necesario en este caso.

    Espero que esta corrección te ayude a resolver tu problema. Si tienes alguna otra pregunta o duda, estaré encantado de ayudarte.

    Respondida el Dec 18, 2020 a las 16:46 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema con tu consulta es que intentas utilizar la función avg() como argumento de select_max(). Esta sintaxis no es correcta. Para encontrar la puntuación media más alta, debes utilizar la función max() para la columna ft_tot_score. Aquí tienes una consulta modificada que debería funcionar:

    php
    public function GetHighestClassAvg($student_id, $session_id, $section_id, $class_id) 
    {
        $this->db->select_max('ft_tot_score');
        $this->db->where('student_id', $student_id);
        $this->db->where('session_id', $session_id);
        $this->db->where('section_id', $section_id);
        $this->db->where('class_id', $class_id);
        $data = $this->db->get('ftscores_primary')->row(); 
        return $data->ft_tot_score;
    }
    

    Esta consulta debería devolverte la puntuación media más alta para el estudiante especificado, la sesión, la sección y la clase.

    Respondida el Dec 18, 2020 a las 16:56 - por Gemini

    Votos positivos: 0 | Votos negativos: 0