2013-05-15 58 views
0

这里是我试图运行脚本:联声明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); 

但我得到这个错误:

Fatal error: Uncaught [42S22] - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'total' in 'field list' thrown in /home/ASDFASDF/public_html/ADSFADSF/rb.php on line 265

如何使用总行划分他们的总和得到一个平均读数?

+0

不能使用同一个选择列表中的别名“total”。你可能需要使用COUNT(*)'或者把所有东西包装在一个派生表中,这个派生表首先计算里面的聚集,然后在外部进行分割。 –

+0

'avg(dialog_score)'可能更简洁。 – Orangepill

回答

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 
1

您不能使用在SELECT语句的同一级别上生成的ALIAS。你必须选择

一,使用整个表达式,

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