我可以在MySQL中将所有值替换为有序值列表中的位置

时间:2011-08-25 15:49:36

标签: mysql where

我有下表:

| col1 | col2 | col3 |
| 1    | 1.1  | 9.3  |
| 2    | 7.9  | 1.3  |
| 3    | 3.7  | 7.3  |
| 4    | 9.0  | 5.7  |

我需要使用col2col3的加权和来排序行。它可以通过以下方式轻松完成:

select * from mytable order by (0.8*col2 + 0.2*col3)

现在我想要做的几乎相同,唯一的区别是我需要将col2col3中的实际值替换为列中所有值的有序列表中的位置。例如,在第二列中,应该进行以下替换:

(1.1 -> 1, 3.7 -> 2, 7.9 -> 3, 9.0 -> 4)

有没有人知道是否有一种简单的方法来构建一个可以做到这一点的查询。换句话说,我想有类似的东西:

select * from mytable order by (0.8*modified(col2) + 0.2*modified(col3))

其中modified函数将值替换为列中所有值的有序列表中的位置。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

SET @cnt := 0;
update mytable m ,
(
SELECT
    @cnt := @cnt + 1 as newid,
    col1
 from mytable order by (0.8*col2 + 0.2*col3)
) as mysorted
set a.col2 = mysorted.newid
where a.col1 = mysorted.col1