2013-02-28 138 views
0

我正在尝试计算我的质心点的距离,即通过标记总数计算的距离,以及标记出现的即时时间总和。这就是(tc_sum/cnt)的概念。
但是,子查询中的SELECT不允许我获取质心点,因为“centr”尚未计算,所以我无法获得“距离”。
任何帮助?MySQL获取子查询值

SELECT cnt, tc_sum, ROUND(tc_sum/cnt) as centr, distance 
FROM (
    SELECT SUM(timecode) as tc_sum, count(timecode) as cnt, ABS(centr - '".$timecode."') AS distance 
    FROM dados d 
    WHERE tag = 'donald' 
    AND filename = 'donald.mp4' 
    AND group_id = '1' 
    ) d 
+0

你得到什么输出? – DevelopmentIsMyPassion 2013-02-28 11:32:44

+0

错误代码:1054.“字段列表”中的未知列'centr' – zppinto 2013-02-28 11:33:19

+0

您无法像这样使用centr。尝试复制第二个查询中的“ROUND(tc_sum/cnt)”而不是“centr” – DevelopmentIsMyPassion 2013-02-28 11:35:20

回答

1
SELECT 
SUM(timecode) as tc_sum, 
SUM(timecode) as cnt, 
ABS(SUM(timecode)/SUM(timecode) - '".$timecode."') AS distance, 
ROUND(SUM(timecode)/SUM(timecode)) AS centr 
FROM dados d 
WHERE tag = 'donald' 
AND filename = 'donald.mp4' 
AND group_id = '1' 

查询一行之后的作品行和您不能引用别名这种方式。你必须再次“重新计算”它们。 “重新计算”不是正确的词,因为结果不是真正计算多次。优化器会照顾它只计算一次。但别名只在查询运行后才知道。我害怕我的英语太糟糕了,以很好的方式解释它:)

+0

部分原因是有效的,但是我失去了质心点计算的概念! – zppinto 2013-02-28 11:41:01

+0

@zppinto你是什么意思? – DevelopmentIsMyPassion 2013-02-28 11:43:26

+0

@zppinto是的,你是什么意思? – fancyPants 2013-02-28 11:44:37

1

尝试

SELECT cnt, tc_sum, ROUND(tc_sum/cnt) as centr, distance 
FROM (
SELECT SUM(timecode) as tc_sum, count(timecode) as cnt, ABS(ROUND(tc_sum/cnt)- '".$timecode."') AS distance 
FROM dados d 
WHERE tag = 'donald' 
AND filename = 'donald.mp4' 
AND group_id = '1' 
) d 
+0

它不起作用! tc_sum尚未计算出来... – zppinto 2013-02-28 11:38:16