首页 > 数据库 >mysql 查询根据外部数据排序

mysql 查询根据外部数据排序

时间:2023-05-06 19:33:30浏览次数:40  
标签:product 外部 列表 查询 FIELD mysql 排序 ORDER

1、FIELD 函数

FIELD 是一个 MySQL 函数,用于返回一个或多个表达式在列表中的位置。它可以用于对查询结果进行排序或筛选。

2、根据外部数据排序

在 MySQL 中,可以使用 ORDER BY FIELD() 函数根据外部数据对查询结果进行排序。FIELD() 函数可以接受一个或多个参数,并返回第一个参数在后续参数中出现的位置,如果未找到,则返回 0。通过将外部数据作为 FIELD() 函数的参数,可以将查询结果按照外部数据的顺序进行排序。

以下是一个示例,假设有一个产品表 product_table,其中包含产品 ID 和产品名称两个字段,希望按照给定的产品 ID 列表对产品进行排序:

SELECT product_id, product_name
FROM product_table
WHERE product_id IN (1, 3, 2, 5, 4) -- 外部数据作为 IN 子句的参数
ORDER BY FIELD(product_id, 1, 3, 2, 5, 4); -- 外部数据作为 FIELD() 函数的参数

上面的查询语句中,WHERE 子句用于筛选出指定产品 ID 列表中存在的产品,ORDER BY 子句使用 FIELD() 函数将查询结果按照指定的产品 ID 列表顺序进行排序。

需要注意的是,上面的示例假设已经知道了外部数据的值。如果外部数据存储在其他表中,可以使用子查询或者连接操作获取外部数据。同时,如果需要对多个字段进行排序,可以在 FIELD() 函数中同时指定多个字段和顺序。

3、不在 FIELD 里的 排后面去

在 MySQL 中,可以使用 CASE WHEN 表达式和 ORDER BY 子句来将不在 FIELD() 函数中的数据排在结果集的后面。具体来说,可以使用 CASE WHEN 表达式将不在 FIELD() 函数中的数据赋予一个较大的排序值,然后在 ORDER BY 子句中按照这个排序值进行排序。

以下是一个示例,假设有一个产品表 product_table,其中包含产品 ID 和产品名称两个字段,希望按照给定的产品 ID 列表对产品进行排序,同时将不在列表中的产品排在结果集的后面:

SELECT product_id, product_name
FROM product_table
ORDER BY 
  CASE 
    WHEN product_id IN (1, 3, 2, 5, 4) THEN FIELD(product_id, 1, 3, 2, 5, 4)
    ELSE 999999 -- 不在列表中的数据赋予一个较大的排序值
  END;

上面的查询语句中,ORDER BY 子句使用 CASE WHEN 表达式将不在列表中的数据赋予一个较大的排序值,然后按照这个排序值进行排序。需要注意的是,上面的示例中将不在列表中的数据赋予了一个较大的排序值 999999,可以根据实际情况设置一个合适的值。

标签:product,外部,列表,查询,FIELD,mysql,排序,ORDER
From: https://www.cnblogs.com/pine007/p/17378309.html

相关文章

  • 【MySql】Sql优化(三)——性能优化
    一、前言      当数据库数据达到一定数量的时候,结合数据库连接池Druid的可视化监控界面,对系统中运行的sql语句进行检测,对使用频繁、执行时间长的sql语句进行优化。二、优化方案原则[原则一:选择需要优化的SQL]1,选择需要优化的SQL:不是所有的SQL都需要优化,在优化的过程中,首......
  • SQL语法之:连表查询:union all
    1、准备两条sql查询出来的字段数必须一致表1字段:数据:表2字段:数据:2、使用1、两张表结构完全一样,查询字段顺序也一样selectID,NAME,SEX,AGE,NAME2fromT_01UNIONALLselectID,NAME,SEX,AGE,NAME2fromT_02;结果:2、查询字段顺序不一样,但是对应的......
  • 利用Navicat的历史日志查询表的索引信息(还可以查询很多系统级别的信息)
    1、使用前提所有的能用Navicat连接的数据库都可以使用这个方法DDL/DML语句都有2、Navicat中的历史日志3、比如查询mysql的表的索引先打开“历史记录”选择一张表-设计表查看“历史记录”,点击“暂停”......
  • MySQL如何获取binlog的开始时间和结束时间
    MySQL数据库恢复到指定时间点时,我们必须通过MySQL全备+MySQL增量备份(可选)+MySQL的二进制日志(binlog)进行重放来恢复到指定时间点,实际的生产环境中,可能一段时间内生成了多个二进制日志文件(binlog),MySQL本身不会存储二进制日志文件(binlog)的开始时间和结束时间,如果要还原到某个时间点......
  • Flink Cdc MySQL 整库同步到 StarRocks
    这段时间开始调研使用StarRocks做准实时数据仓库:flinkcdc实时同步数据到StarRocks,然后在StarRocks中做分层计算,直接把StarRocks中的ADS层提供给BI查询。架构如下:由于用到的表比较多,不能用FlinkSQL给每个表都做个CDC的任务(任务太多不好维护、对数据库又可能有......
  • mysql查询某条数据出现两次以上
    查询order_id重复出现两次以上selectorder_idfromt_testwhere1=1GROUPBYorder_idHAVINGcount(order_id)>1;查询order_id,phone重复出现两次以上select*fromt_testwhere1=1GROUPBYorder_id,phoneHAVINGcount(order_id+phone)>1; ......
  • MongoDB 从 mysql等数据库中导入数据
    关键字:MongoDB从mysql等数据库中导入数据一、向mongodb数据库导入数据在MongoVUE中选择一个数据库右键import然后填写mysql等数据库的连接信息点击import即可导入!......
  • 自动备份策略之mysql
    关键字:自动备份策略之mysql最常见的几种备份方式及策略:1、逻辑备份:使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。优点:最大好处是能够与正在运行的mysql自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许......
  • MYSQL格式化日期
    要将MySQL数据库中的日期时间格式2022-03-2300:00:00转换为日期格式2022-03-23,可以使用MySQL的DATE函数。DATE函数会将指定的日期/时间表达式转换为日期格式,忽略时间部分。以下是示例代码:SELECTDATE('2022-03-2300:00:00');执行完上述代码后,会返回以下结果:+---------------......
  • SpringBoot 操作 MongoDB 新增和查询
    MongoDBJAVA新增+查询上接SpringBoot整合MongoDB,记一下MongoDB的CRUD方法。Create新增使用MongoRepository方式的新增非常简单,之前的整合中已经尝试过,这里再总结一下:首先需要有对应的实体类对象:@Data@AllArgsConstructor@NoArgsConstructor@ToStringpublicc......