开发者社区> 问答> 正文

首先按特定字段值排序

我有一个包含3列的表格:

id | name | priority

1 | core | 10 2 | core | 9 3 | other | 8 4 | board | 7 5 | board | 6 6 | core | 4 我想使用以下顺序来排序结果集,priority但首先name=core要优先考虑那些具有较低优先级的行。结果应如下所示

id | name | priority

6 | core | 4 2 | core | 9 1 | core | 10 5 | board | 6 4 | board | 7 3 | other | 8

展开
收起
保持可爱mmm 2020-05-11 10:21:41 438 0
1 条回答
写回答
取消 提交回答
  • 还有MySQL FIELD函数。

    如果要对所有可能的值进行完整排序:

    SELECT id, name, priority FROM mytable ORDER BY FIELD(name, "core", "board", "other") 如果您只关心“核心”在前,而其他值则无关紧要:

    SELECT id, name, priority FROM mytable ORDER BY FIELD(name, "core") DESC 如果要先按“核心”排序,然后按正常排序顺序按其他字段排序:

    SELECT id, name, priority FROM mytable ORDER BY FIELD(name, "core") DESC, priority 不过,这里有一些警告:

    首先,我很确定这是仅mysql的功能-问题被标记为mysql,但您永远不会知道。

    其次,注意其FIELD()工作原理:它返回值的从一开始的索引 -在的情况下FIELD(priority, "core"),如果“ core”是值,则返回1。如果该字段的值不在列表中,则返回零。这就是为什么DESC除非您指定所有可能的值,否则是必需的。

    2020-05-11 10:23:41
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载