2011-08-23 519 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

一個括號丟失,只是之前,添加它,將工作。 –