在 sql 中,我想做类似的事情
update table set col = rank(col) order by col
我该怎么做呢 ?
目的 :
目前 col 具有极值,例如 -14000、23、4000、23000 ...它们用于 asc、desc 排序但是当我将它们绘制在滑块上时,例如 10 个位置,每个滑块位置的数据非常不均匀,所以为了平衡它,我希望重新编号该列,
-14000 becomes 0
23 becomes 1
4000 becomes 2
等等
在 sql 中,我想做类似的事情
update table set col = rank(col) order by col
我该怎么做呢 ?
目的 :
目前 col 具有极值,例如 -14000、23、4000、23000 ...它们用于 asc、desc 排序但是当我将它们绘制在滑块上时,例如 10 个位置,每个滑块位置的数据非常不均匀,所以为了平衡它,我希望重新编号该列,
-14000 becomes 0
23 becomes 1
4000 becomes 2
等等
用这个:
update table set col = (select count(*) from (select col from table) as temptable where temptable.col <table.col );
在 SQL Server 中,您可以使用两个子查询和ROW_NUMBER函数。如有重复col,排名将按照标准比赛排名。
示例脚本:
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
)