Встроенный объявленный MySQL "неизвестный столбец"

Вот сценарий, который я пытаюсь запустить:

$resultadosPromediados = R::getAll("SELECT count(*) as total, 
                                    SUM(dialogue_score) / total as dialogue_score, 
                                    SUM(consulta_general_score) / total as consulta_general_score, 
                                    SUM(tarea_score) / total as tarea_score, 
                                    SUM(foro_calificacion_score) / total as foro_calificacion_score,  
                                    SUM(foro_respuesta_score) / total as foro_respuesta_score
                                    FROM ranking
                                    WHERE created = :ultima_feha",
                                    array(':ultima_feha' => $fecha));
print_r($resultadosPromediados);

Но я получаю такую ​​ошибку:

Неустранимая ошибка: Неперехваченный [42S22] - SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «Итого» в «Списке полей», брошенный в /home/ASDFASDF/public_html/ADSFADSF/rb.php в строке 265

Как я могу использовать итоговые строки, чтобы разделить их сумму, чтобы получить среднее значение?


person sergserg    schedule 15.05.2013    source источник
comment
Вы не можете использовать псевдоним total в том же списке выбора. Вам нужно будет либо использовать COUNT(*), либо обернуть все это в производную таблицу, которая сначала вычисляет агрегаты внутри, а затем выполняет деление снаружи.   -  person Michael Berkowski    schedule 15.05.2013
comment
avg(dialog_score) мог бы быть более кратким.   -  person Orangepill    schedule 15.05.2013


Ответы (2)


Просто используйте переменную:

SELECT @total := count(*), 
    SUM(dialogue_score) / @total as dialogue_score, 
    SUM(consulta_general_score) / @total as consulta_general_score, 
    SUM(tarea_score) / @total as tarea_score, 
    SUM(foro_calificacion_score) / @total as foro_calificacion_score,  
    SUM(foro_respuesta_score) / @total as foro_respuesta_score
FROM ranking
WHERE created = :ultima_feha
person medina    schedule 15.05.2013

Вы не можете использовать ALIAS, который создается на том же уровне оператора SELECT. У вас есть выбор

Один, чтобы использовать все выражение,

SELECT  count(*) as total, 
        SUM(dialogue_score) / count(*) as dialogue_score, 
        SUM(consulta_general_score) / count(*) as consulta_general_score, 
        SUM(tarea_score) / count(*) as tarea_score, 
        SUM(foro_calificacion_score) / count(*) as foro_calificacion_score,  
        SUM(foro_respuesta_score) / count(*) as foro_respuesta_score
FROM    ranking
WHERE   created = :ultima_feha

Во-вторых, чтобы использовать подзапрос,

SELECT  total,
        dialogue_total / total AS dialogue_score,
        consulta_general_total / total AS consulta_general_score,
        tarea_total / total AS tarea_score,
        foro_calificacion_total / total AS foro_calificacion_score,
        foro_respuesta_total  / total AS foro_respuesta_score
FROM
        (
            SELECT  count(*) as total, 
                    SUM(dialogue_score) as dialogue_total, 
                    SUM(consulta_general_score) as consulta_general_total, 
                    SUM(tarea_score) as tarea_total, 
                    SUM(foro_calificacion_score) as foro_calificacion_total,  
                    SUM(foro_respuesta_score) as foro_respuesta_total
            FROM    ranking
            WHERE   created = :ultima_feha
        ) alias
person John Woo    schedule 15.05.2013