【问题标题】:Sorting both Alpanumeric and Numeric column in mysql在mysql中对字母数字和数字列进行排序
【发布时间】:2020-03-09 06:38:24
【问题描述】:

这是我的表格数据:

 - file_number -   status
 - ABC099    -     running
 - ABC100    -     running
 - ABC101    -     removed
 - ...
 - ABC1001   -     removed
 - ABC1002   -     removed
 - ABC1003   -     running
 - BCA099    -     running
 - BCA100   -      removed
 - BCA101   -      running
 - ...
 - BCA1001   -     removed
 - BCA1002   -     running
 - BCA1003   -     running

这个查询返回正确的答案,file_number 排序:

SELECT file_number,status FROM table ORDER BY LENGTH(file_number) asc

但我也想对状态列进行排序,即所有正在运行的文件应该放在第一位,删除的文件应该显示在最后。

预期结果:

 - file_number  -  status
 - ABC099    -     running
 - ABC100    -     running
 - ABC1003   -     running
 - ...
 - BCA099    -     running
 - BCA101   -      running
 - ...
 - BCA1002   -     running
 - BCA1003   -     running
 - ABC101    -     removed
 - ABC1001   -     removed
 - ABC1002   -     removed
 - BCA100   -      removed 
 - BCA1001   -     removed

【问题讨论】:

  • 您的查询仅按长度排序
  • FIELD ()
  • SELECT file_number,status FROM table ORDER BY LENGTH(file_number) asc, status desc.这也行不通
  • @Strawberry :你能解释一下吗
  • 具体解释一下?

标签: mysql sql sql-order-by


【解决方案1】:

你应该试试

SELECT file_number,status
FROM `table` 
ORDER BY status desc,
     LENGTH(file_number) asc,
     file_number asc

首先您应该按状态订购,然后您应该按长度订购。不要先按长度排序。

【讨论】:

  • 不按file_number排序,而是按状态排序
【解决方案2】:

您可以将file_number 转换为signed 以便按数字部分下订单。 如果状态列只有两个选项,然后将status desc 部分添加到 ORDER BY 子句中以提供所需的字母顺序:

SELECT file_number,status
  FROM `table` 
 ORDER BY status DESC, CAST(file_number AS signed)

Demo

更新:如果您也有不同的字母组合作为文件编号的前缀,并希望通过它们突出排序,那么考虑将此列作为第一个组件添加到 ORDER BY 列表中:

SELECT file_number,status
  FROM `table` 
 ORDER BY status DESC, file_number, CAST(file_number AS signed)

Demo 2

【讨论】:

  • 已尝试但未按文件编号排序
  • @MEGHAPOOJARY 你看过演示吗?它会产生你想要的结果。
  • 我的表的文件名为 ABC001、ABC002 等以及 BCA001、BCA002 等和 CAB001、CAB002 等
  • 请通过编辑您的问题@MEGHAPOOJARY 准确说明示例数据和所需结果
  • 编辑了问题。在您的演示中,两个文件编号不是状态。
猜你喜欢
  • 2016-05-19
  • 2018-07-29
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
相关资源
最近更新 更多