`

MySQL查询结果按某值排序

阅读更多
MySQL查询结果按某值排序
使用MySQL很多时候我们不仅只是查询出结果,还需要对查询结构进行排序,下文对查询结果按某值排序的方法作了详细的介绍,供您参考。
AD:
MySQL查询结果如何排序呢?这是很多人都提过的问题,下面就教您如何对MySQL查询结果按某值排序,如果您感兴趣的话,不妨一看。

之前有一个功能修改,要求MySQL查询结果中:

id name * * *

1 lucy ...

3 lucy ...

2 lily ...

4 lucy ...

名字为lucy的优先排在前面,百思不得其解,可能有人会说简单 union嘛 或者弄个临时表什么的,其实我也想过,但是本身SQL逻辑就很多了(上面只是简例),再union的话或者临时表可能绕很大的弯路,后来看到一篇文章尝试着加入order by find_in_set(name,'lucy') ,结果 得到的结果为lucy全部在下面,随即我改为order by find_in_set(name,'lucy') desc 实现结果为

id name * * *

1 lucy ...

3 lucy ...

4 lucy ...

2 lily ...

基本实现,可是又有点不确定的心情,查mysql文档发现find_in_set语法

FIND_IN_SET(str,strlist)  

假如字符串str 在由N 子链组成的字符串列数据表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列数据表就是一个由一些被『,』符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(『,』)时将无法正常运行

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); 

        -> 2 

看了这个我估计结果为什么要加desc 了 find_in_set返回的值是,当存在lucy的时候 返回他的位置,没有的时候为0,空的时候null,所以排序为1,1,1,0,如果加在列上就为

id name FIND_IN_SET * *

1 lucy 1 ...

3 lucy 1 ...

2 lily 0 ...

4 lucy 1...

表结构如下:

mysql> select * from test; 
+----+-------+ 
| id | name   | 
+----+-------+ 
|   1 | test1 | 
|   2 | test2 | 
|   3 | test3 | 
|   4 | test4 | 
|   5 | test5 | 
+----+-------+ 
执行以下SQL:

mysql> select * from test where id in(3,1,5); 
+----+-------+ 
| id | name   | 
+----+-------+ 
|   1 | test1 | 
|   3 | test3 | 
|   5 | test5 | 
+----+-------+ 
3 rows in set (0.00 sec) 
这个select在mysql中得结果会自动按照id升序排列,
但是我想执行"select * from test where id in(3,1,5);"的结果按照in中得条件排序,即:3,1,5,想得到的结果如下:
id name
3 test3
1 test1
5 test5

方法如下:

select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5'); 
select * from test where id in(3,1,5) order by substring_index('3,1,2',id,1); 
分享到:
评论

相关推荐

    将MySQL查询结果按值排序的简要教程

    这是很多人都提过的问题,下面就教您如何对MySQL查询结果按某值排序,如果您感兴趣的话,不妨一看。 之前有一个功能修改,要求MySQL查询结果中: id name * * * 1 lucy ... 3 lucy ... 2 lily ... 4 lucy ... 名字...

    mysql查询优化之索引优化

    MySQL查询优化是数据库管理中的关键环节,特别是在大数据量的场景下,索引优化能显著提升查询性能。本文将深入探讨“mysql查询优化之索引优化”这一主题。 首先,了解索引的基本概念至关重要。索引是数据库为了快速...

    mysql in 排序

    - **排序**:指的是按照某一列或某几列的值对查询结果进行升序(ASC)或降序(DESC)排列的过程。 #### 使用场景示例 假设我们有一个名为`table`的数据表,其包含以下数据: | id | name | |----|--------| | 1 | ...

    MySQL查询排序与查询聚合函数用法分析

    排序是通过对查询结果进行升序或降序排列,使得数据更加有条理,便于理解和分析。基本的语法结构如下: ```sql SELECT * FROM 表名 ORDER BY 列1 ASC|DESC [ ,列2 ASC|DESC ,...] ``` - `ASC` 表示升序排列,即...

    MySQL 查询重复内容只显示一条

    3. **只显示一条重复内容**:若要保留重复数据中的某一条,可以选择其中的一个特定记录,比如按ID排序后的第一条或者最后一条。以下是一种方法,保留`id`最小的重复记录: ```sql SELECT t1.* FROM ( SELECT ...

    MySQL单表查询练习

    - **解析**:此例中的关键在于如何使用`ORDER BY`子句对结果集按照多列进行排序,先按工资(`salary`)降序(`DESC`)排序,如果工资相同,则按照入职日期(`hire_date`)升序(`ASC`)排序。 #### 20. 查询姓名不包含M,且...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy create table STUDENT( STU_ID int primary KEY, STU_NAME char(10) not null, ...

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...

    MySql 5.1 参考手册.chm

    3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找...

    mysql基本查询语句学习.doc

    这些子句用于限制查询结果的行数,通常用于实现分页功能。 1. **LIMIT**:指定要返回的记录数。 2. **OFFSET**:指定要跳过的记录数。 ##### 示例 ```sql SELECT column1, column2, ... FROM table_name LIMIT ...

    MySQL单表查询

    如果只关心特定的几个字段,可以通过指定这些字段来简化查询结果。 #### 三、进阶查询技巧 **1. DISTINCT 关键字** - 作用:去除查询结果中的重复记录。 - 示例: ```sql SELECT DISTINCT gender FROM ...

    MySQL 5.1参考手册

    3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1...

    mysql 单表多表查询

    ` 这个语句会根据指定条件从表中选取特定的行,然后按某列排序,并限制返回的行数。 2. **多表查询**: 当我们需要从多个相关表中获取数据时,就需要使用多表查询。常见的多表查询方法有JOIN、INNER JOIN、LEFT JOIN...

    mysql查询语句汇总.rar

    本资料“mysql查询语句汇总.rar”包含了一份关于MySQL查询语句的详细文档“mysql查询语句汇总.docx”,旨在帮助用户理解和掌握在MySQL中进行数据查询的各种方法。 1. **基础查询** - **SELECT语句**:用于从数据库...

    MySQL 5.1中文手冊

    3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找...

    MySQL中在查询结果集中得到记录行号的方法

    在MySQL中,获取查询结果集中记录的行号通常是一个挑战,因为与Oracle和SQL Server不同,MySQL并没有直接提供ROW_NUMBER()或RANK()这样的内置函数。然而,这并不意味着无法实现这一功能。一种常见的解决方案是利用预...

    MySQL查询语句常见操作语句格式代码.docx

    `ORDER BY`子句用于对查询结果进行排序,默认为升序(ASC),可以通过`DESC`关键字指定降序。`LIMIT`子句用于限制返回的记录数。 **示例**:如果要找出工资最高的前10名员工,可以使用如下语句: ```sql SELECT * ...

    MySQL学习笔记、学习文档

    Mybatis查询某- -日、周、月数据.txt MySQL安装教程.txt MySQL查询最近-周、月每月、周统计数据.txt MySQL入Ar ]很简单学习笔记李国华.dox Oracle查看表结构.txt SQL作业代理禁用.txt sql.txt SQL-Transaction事物...

Global site tag (gtag.js) - Google Analytics