2012-01-22 44 views
0

在SQL中,我想這樣做重新編號(集列進行排序)命令後該列

update table set col = rank(col) order by col 

我如何做到這一點的列?

目的:

目前山坳已經極端值,比如-14000,23,4000,23000 ......他們在遞增,遞減排序使用,但是當我繪製它們放在滑塊,有說10個位置,每個滑塊位置有極不平衡的數據,所以即使出來我希望重新編號列,

-14000 becomes 0 
23 becomes 1 
4000 becomes 2 

+1

什麼RDBMS和版本? – pilcrow

+0

@pilcrow我使用毛毛雨:http://www.drizzle.org/ ...它的一個分支的MySQL。 – Pheonix

回答

2

使用這樣的:

update table set col = (select count(*) from (select col from table) as temptable where temptable.col <table.col); 
+0

偉大的純粹的SQL解決方案。 –

0

在SQL Server中,可以使用兩個子查詢和ROW_NUMBER功能。在col中有重複的情況下,排名將會跟着standard competition ranking

示例腳本:

SELECT * INTO #TABLE 
FROM 
(
    select -14000 col 
    union all SELECT 23 
    union all select 4000 
    union all SELECT 23 --sample duplicated data 
) Unioned 

UPDATE #TABLE 
SET col = 
(
    SELECT top 1 rowNum 
    FROM 
    (
     SELECT 
      col 
      , row_number() OVER (order by col) - 1 rowNum --starts at 0 rank 
     FROM #TABLE 
    ) MySubQuery 
    WHERE MySubQuery.col = #TABLE.col 
) 
+0

我很擔心你的這部分查詢:'select -14000 col union all SELECT 23 union all select 4000 union all SELECT 23 - 樣本重複數據 '我的數據在問題中只是一個例子,我有120,000行...我必須列出所有內容嗎? – Pheonix

+0

@Pheonix:絕對不會!我只在示例中包含了「SELECT INTO」語句以提供概念驗證。對於真正的表格,您可以使用'UPDATE'語句並用您的真實表名替換'#Table'。當然,創建一個臨時表來測試更新先不會是一個壞主意...... –

+0

對不起,它不工作,可能問題是特定於毛毛雨的東西::'錯誤1064(42000):您有一個錯誤你的SQL語法;檢查對應於您的細雨服務器版本使用附近的正確語法手冊「1周的rowNum FROM ( 選擇 SW ,ROW_NUMBER(」在行3' – Pheonix