我可以在 MySQL 中将列中的所有值替换为其在有序值列表中的位置吗
我有下表:
| 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
函数用该值在该列中所有值的有序列表中的位置替换该值。
I have the following table:
| col1 | col2 | col3 |
| 1 | 1.1 | 9.3 |
| 2 | 7.9 | 1.3 |
| 3 | 3.7 | 7.3 |
| 4 | 9.0 | 5.7 |
I need to order the rows using the weighted sum of the col2
and col3
. It can be easily done in the following way:
select * from mytable order by (0.8*col2 + 0.2*col3)
Now I want to do almost the same, the only difference is that I need to replace the actual values in the col2
and col3
by there position in the ordered list of all values in the column. For example, in the second column the following replacements should be done:
(1.1 -> 1, 3.7 -> 2, 7.9 -> 3, 9.0 -> 4)
Does anybody know if there is an easy way to construct a query that would do that. In other words, I would like to have something like that:
select * from mytable order by (0.8*modified(col2) + 0.2*modified(col3))
where the modified
function replace the value by its position in the ordered list of all the values from the column.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你可以尝试这样的事情:
You can try something like this: