错误1054 mySQL和日志功能

时间:2013-03-06 18:48:37

标签: mysql

输入此查询时出现此错误:

SELECT E.event, 
       ED.location, 
       ED.doe, 
       ED.category, 
       ( ( ED.numofdataset / ED.numoftimesloc ) * 100 )                    AS 
       LOGLOC, 
       ( ( ED.numofdataset / ED.numoftimesdoe ) * 100 )                    AS 
       LOGDOE, 
       ( ( ED.numofdataset / ED.numoftimescat ) * 100 )                    AS 
       LOGCAT, 
       (( ( ED.numoftimesloc * ( Log(logloc) ) ) + 
           ( ED.numoftimesdoe * ( Log(logdoe) ) ) + ( ED.numoftimescat * 
                                                      ( Log(logcat) ) ) )) AS 
       FINALRANK 
FROM   event E, 
       eventdetail ED 
WHERE  E.eventid = ED.eventid 
       AND ED.location = 'LONDON' 
       AND ED.category = 'Sports' 
ORDER  BY finalrank DESC; 

命令控制器告诉我'LOGLOC'是'字段列表'中的未知列。 谁能告诉我我做错了什么,以及我对LOG()函数的使用是否正确?

2 个答案:

答案 0 :(得分:2)

您无法对别名列执行计算。

试试这个:

SELECT f.event, 
       f.location, 
       f.doe, 
       f.category, 
       f.logloc, 
       f.logdoe, 
       f.logcat, 
       (( ( f.numoftimesloc * ( Log(f.logloc) ) ) + 
             ( f.numoftimesdoe * ( Log(f.logdoe) ) ) + ( 
           f.numoftimescat * ( Log(f.logcat) ) ) )) AS FINALRANK 
FROM   (SELECT E.event, 
               ED.location, 
               ED.doe, 
               ED.category, 
               ( ( ED.numofdataset / ED.numoftimesloc ) * 100 ) AS LOGLOC, 
               ( ( ED.numofdataset / ED.numoftimesdoe ) * 100 ) AS LOGDOE, 
               ( ( ED.numofdataset / ED.numoftimescat ) * 100 ) AS LOGCAT, 
               ed.numoftimesloc, 
               ed.numoftimesdoe, 
               ed.numoftimescat 
        FROM   event E, 
               eventdetail ED 
        WHERE  E.eventid = ED.eventid 
               AND ED.location = 'LONDON' 
               AND ED.category = 'Sports' 
        ORDER  BY finalrank DESC) f 

答案 1 :(得分:0)

这不是一个已知的专栏,因为它不在桌面上。你在这里为它创建了一个别名:

((ED.numofdataset / ED.numoftimesloc) * 100) AS LOGLOC

但是,别名列不能在SELECT子句中的其他位置引用。 (想想它就像它们在解析了该子句之后才真正存在。所以它们可以用在某些其他子句中,例如ORDER BY,因为它对SELECT的结果起作用而SELECT正在表格上运作。)

可能有一些SQL技巧我不知道减少代码重复,但你可能只需要直接运行计算:

Log((ED.numofdataset / ED.numoftimesloc) * 100)