我有下表:
| col1 | col2 | col3 |
| 1 | 1.1 | 9.3 |
| 2 | 7.9 | 1.3 |
| 3 | 3.7 | 7.3 |
| 4 | 9.0 | 5.7 |
我需要使用col2
和col3
的加权和来排序行。它可以通过以下方式轻松完成:
select * from mytable order by (0.8*col2 + 0.2*col3)
现在我想要做的几乎相同,唯一的区别是我需要将col2
和col3
中的实际值替换为列中所有值的有序列表中的位置。例如,在第二列中,应该进行以下替换:
(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
函数将值替换为列中所有值的有序列表中的位置。
答案 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