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

发布于 2024-12-01 13:07:06 字数 710 浏览 0 评论 0原文

我有下表:

| 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 函数用该值在该列中所有值的有序列表中的位置替换该值。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

め可乐爱微笑 2024-12-08 13:07:06

你可以尝试这样的事情:

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

You can try something like this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文