输入此查询时出现此错误:
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()函数的使用是否正确?
答案 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)