mysql 查询语句 按自定义顺序排序
时间: 2023-11-02 21:06:28 浏览: 145
如果需要按照自定义顺序排序,可以使用 MySQL 的 FIELD 函数。FIELD 函数可以返回一个字符串在一个列表中的位置,然后我们可以根据这个位置进行排序。
假设我们有一个表叫做 `users`,其中有一个字段叫做 `name`,我们想要按照自定义顺序排序,比如先是 "Tom",然后是 "Jerry",最后是其他名字,可以使用以下的 SQL 语句:
```
SELECT * FROM users ORDER BY FIELD(name, 'Tom', 'Jerry') DESC, name ASC;
```
其中, `FIELD(name, 'Tom', 'Jerry')` 返回一个值列表,表示 name 字段在 'Tom', 'Jerry' 中的位置。DESC 表示按照位置从大到小排序,而 name ASC 表示按照名字字母顺序排序。
这样就可以按照自定义顺序排序了。
相关问题
sql语句排序自定义排序
### 实现 SQL 中字段的自定义排序
在 SQL 查询中实现字段的自定义排序可以通过多种方式完成,具体取决于所使用的数据库管理系统 (DBMS) 和需求。
#### 使用 `CASE` 表达式进行自定义排序
对于大多数 DBMS,包括 SQL Server 和 MySQL,可以使用 `CASE` 表达式来创建复杂的排序逻辑。通过这种方式可以根据特定条件调整记录的位置:
```sql
SELECT *
FROM table_name
ORDER BY CASE column_name
WHEN 'value1' THEN 1
WHEN 'value2' THEN 2
-- 添加更多情况...
ELSE 3 END;
```
此方法允许灵活控制不同值之间的相对位置[^1]。
#### 利用字符串函数配合查找索引实现排序
当需要按照预设列表内的项目顺序排列时,在某些情况下可以直接利用字符串操作函数与 `CHARINDEX()` 或者 `FIND_IN_SET()` 函数相结合来进行处理:
```sql
-- 对于 SQL Server 可以这样写:
SELECT *
FROM temp_table
ORDER BY CHARINDEX(name, 'bob,tom,timi');
-- 而对于 MySQL,则应该采用如下形式:
SELECT *
FROM temp_table
WHERE FIND_IN_SET(name, 'bob,tom,timi');
```
上述例子展示了基于名字列的内容按指定序列重新安排输出次序的方法[^2].
#### 应用解码器(Decode)或等价功能改变原有数值映射关系
如果目标是在不更改表结构的前提下修改某列用于比较的关键字权重,那么像 Oracle 数据库里的 DECODE() 这样的内置工具就显得尤为有用;而在其他类型的 RDBMS 上则可能要寻找相应的替代品,比如 PostgreSQL 的 COALESCE(), SQLite 的 IFNULL() 等.
下面是一个适用于 Oracle 的实例,它会把 BBTYPE=3 排到最底部:
```sql
SELECT BBNAME,
BBTYPE,
DECODE(BBTYPE,
'1', 1,
'2', 2,
'4', 3,
'5', 4,
'3', 5) AS BBTYPE_SORT,
REPORTDATE,
ISALLREPORY
FROM TEMP
ORDER BY BBTYPE_SORT;
```
这段代码片段说明了怎样通过转换原始类型编码达到预期的效果[^3].
#### MyBatis Plus 框架下的多字段组合排序策略
除了标准 SQL 提供的功能外,一些高级 ORM 工具也支持更便捷的操作模式。例如,在 Java 开发环境中常用的 MyBatis Plus 就提供了链式调用来简化复杂查询语句构建过程:
```java
qw.orderBy(true, true, "status").orderBy(true, false, "name");
```
这里展示的是先升序再降序两个属性共同作用下产生的最终结果集排序方案[^4].
mysql group by自定义顺序
根据提供的引用内容,MySQL的GROUP BY语句不能自定义顺序。GROUP BY语句用于将行分组,并根据分组后的结果进行聚合操作。GROUP BY语句的结果是根据分组键的唯一值来创建的。这意味着无法按照自定义顺序对分组结果进行排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Mysql学习笔记(杂谈):where,group,having的执行顺序;group by后组内排序;group by后选择某条数据...](https://blog.csdn.net/sinat_38393872/article/details/107998976)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文
相关推荐















