2011-08-23 518 views
1

以下语句更新名为'test'的表中的列。 将UPDATE语句转换为SELECT语句

UPDATE test AS t 
INNER JOIN test AS q ON(
    q.ptime = t.ptime 
) 
SET t.slope_Percentile =(
    (
     SELECT 
      count(*) 
     FROM 
      (
       SELECT 
        * 
       FROM 
        test 
      )AS t1 
     WHERE 
      t1.slope < t.slope 
    )* 100 /(
     SELECT 
      count(*) 
     FROM 
      (
       SELECT 
        * 
       FROM 
        test 
      ) AS tz 
    ) 
); 

不是更新该列的我想收到的SELECT语句给每个行的读数(如果它是一个UPDATE语句将被更新)。

的更多信息(如果需要)对表的性质和代码的目的是在这里: Efficient assignment of percentile/rank in MYSQL

+5

你应该先修复查询...你是在表中'q'加盟,但你永远不使用查询。当'select count(*)from test'会做时,你正在做'select count(*)from(select * from test)'。 – Guffa

+0

这实际上不适用于MYSQL。它表示“”你不能在FROM子句中指定目标表'test'进行更新“ –

回答

2
SELECT t.ptime, 
( 
    ( 
     SELECT 
      count(*) 
     FROM 
      ( 
       SELECT 
        * 
       FROM 
        test 
      )AS t1 
     WHERE 
      t1.slope < t.slope 
    )* 100 /( 
     SELECT 
      count(*) 
     FROM 
      ( 
       SELECT 
        * 
       FROM 
        test 
      ) AS tz 
    ) 
) AS slope_Percentile 
FROM test AS t 
--INNER JOIN test AS q ON 
--q.ptime = t.ptime 
+0

多数民众赞成!谢谢:) –

0

这个怎么样?

SELECT *, (
    (SELECT count(*) 
    FROM test AS t1 
    WHERE t1.slope < t.slope) * 100/
    (SELECT count(*) 
    FROM test as tz)) as newvalue 
FROM test AS t; 
+0

Nope - 给我一个错误; [SQL] SELECT *,( (SELECT count(*) FROM test AS t1 WHERE t1 (*) FROM test) FROM test); [Err] 1064 - 您的SQL语法有错误;检查与您的MySQL服务器对应的手册版本为正确的语法使用附近'FROM测试)'在线7 –

+0

忘记MYSQL需要声明表 –

+0

一个括号丢失,只是之前,添加它,将工作。 –