mysql - SQL 对 A 列进行排序并更新 B 列

标签 mysql sql sorting

我有一个表格,其中的数据类似于:

Inven    DESCRIPT     PrintOrder
---------------------------------
1        D             9
2        B             0
3        A             5
4        Z             0
5        X             1
.        .             .
.        .             .
.        .             .

我想按列 DESCRIPT 降序 alpha (A - Z) 对表进行排序,然后更新列 PRINTORDER,以便完成后,PRINTORDER = 1 的记录是最高的 alpha (A),并且具有PRINTORDER 的最高值将是 alpha (Z) 中的最低值。

如果不使用临时列,这可能吗?如果没有,也不是破坏交易的因素,只是一种偏好。

期望的结果:

根据排序结果更新PrintOrder值

Inven    DESCRIPT     PrintOrder
---------------------------------
1        D             3
2        B             2
3        A             1
4        Z             5
5        X             4

最佳答案

我不清楚您是要修改该表还是只是创建一个结果集。以下是使用标准 SQL 的后者的解决方案:

select Inven, Descript, row_number() over (order by Descript) as PrintOrder
from table t
order by Descript;

编辑:

在 MySQL 中,select 看起来像:

select t.*
from (select Inven, Descript, (@rn := @rn + 1) as PrintOrder
      from table t cross join (select @rn := 0) params
      order by Descript
     ) t
order by Inven;

更新稍微棘手一些,因为您无法排序初始化变量:

update t
    set PrintOrder = (@rn := coalesce(@rn + 1, 1))
    order by Descript;

关于mysql - SQL 对 A 列进行排序并更新 B 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927520/

相关文章:

sql - 从一个表中获取月份列表,并从另一个表中计算每个月份的列表

php - mysql : fetch multidimensional arrays separated and sorted by date column

string - 如何按字典顺序对字符串进行排序?

sql - 将日期参数添加到报告 TSQL

javascript - 使用 jquery 插件对 jsp 中的表进行排序

arrays - 以最小化序列重复为目标对数组进行排序

MySQL : Select from table based on shape of arabic character in a column

php - MySql 批量插入

php - Zend/Doctrine 无法执行 ORM 操作,表已经存在

php - Yii2:是否可以使用 JOIN 同时查询 2 个数据库?