ORDER BY两个字段。第二字段(int)订单为varchar问题

时间:2020-09-30 04:52:39

标签: mysql sql-order-by

现在我已经为这个问题折断了两个小时,我想这很简单。我有一个带有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

因此,在顺序的第二部分中,它像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);

所有结果相同。希望有人能给我快速的指点!

1 个答案:

答案 0 :(得分:1)

mysql的引用函数ABS

task_group

您依次选择了task_nametask_group。请检查添加group的顺序。