【问题标题】:ORDER BY two fields. Second field (int) orders as varchar problemORDER BY 两个字段。第二个字段 (int) 订单作为 varchar 问题
【发布时间】:2020-09-30 04:52:39
【问题描述】:

我已经为此烦恼了 2 个小时,我认为这很简单。我有一个带有 varchar 值(task_group)和一个 int 值(task_group_weight)的表。我希望表格先按 task_group 排序,然后按 task_group_weight 排序。

我的查询是:

SELECT
    `id`,
    `task_group`,
    `task_group_weight` 
FROM
    `cron` 
WHERE
    `task_group` LIKE 'Imap%' 
ORDER BY
    `task_name`,
    `task_group_weight`;

我希望输出是:

|id |task_group | task_group_weight
|1  |imaprunner | 1
|2  |imaprunner | 2
|3  |imaprunner | 10

我得到的是:

|id |task_group | task_group_weight
|1  |imaprunner | 1
|2  |imaprunner | 10
|3  |imaprunner | 2

因此,在 order by 的第二部分中,它像 varchar 而不是 int 一样对其进行排序。我已经尝试了以下方法:

  ORDER BY `task_name`,`task_group_weight`+0;
  ORDER BY `task_name`, CAST(`task_group_weight` AS UNSIGNED);
  ORDER BY `task_name`, LPAD(`task_group_weight`,5,0);

所有结果都相同。希望有人能给我指点一下!

【问题讨论】:

  • 您在 ORDER BY 中使用task_name 列。您不会向我们展示此栏的价值。我认为按其值排序提供了您已经看到的排序(因此随后按task_group_weight 排序没有任何额外效果)。

标签: mysql sql-order-by


【解决方案1】:

mysql的引用函数ABS

ORDER BY task_group, ABS(task_group_weight)

您有 task_group 在 select 和 task_name 按顺序排列。请按顺序检查添加task_group

【讨论】:

  • 首先,感谢您的评论。我试过这个但没有运气,仍然得到 1 - 10 - 2 作为 task_group_weight 的排序
  • @DJQ 请检查我编辑的答案。您在 Order by 中有 task_name。可能是1 & 10 有相同的task_name2 有另一个task_name
  • 你在正确的地方.. 没有添加 task_group 但(我这边的错误)task_name。 ABS成功了!你先生是救命稻草!
猜你喜欢
  • 2020-10-11
  • 2018-05-13
  • 2011-09-23
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2021-10-04
相关资源
最近更新 更多