数据表

  一个简单的示例表,user_id为用户id外键,score为用户分数。

使用 CASE WHEN 自定义排序优先级

  用户分数查询系统中,首页列表按照分数降序排列,即原本应是如下顺序:

  出于人性化考虑,当用户进入系统时,我们希望该用户的所有得分都在最前面显示,且不影响其他记录的排序。这时可以用CASE WHEN来自定义排序的优先级。

  1. 写法①:简单CASE语句
-- WHEN语句中的值为判断条件,THEN语句中的值为优先级(越大优先级越高)
SELECT * FROM demo ORDER BY CASE user_id WHEN 2 THEN 10 END DESC, score DESC;
  1. 写法②:可搜索CASE语句
-- 相等判断
SELECT * FROM demo ORDER BY CASE WHEN user_id = 2 THEN 10 END DESC, score DESC;
-- 范围判断
SELECT * FROM demo ORDER BY CASE WHEN (user_id > 1 AND user_id < 3) THEN 10 END DESC, score DESC;
-- 相似判断
SELECT * FROM demo ORDER BY CASE WHEN user_id LIKE "%2%" THEN 10 END DESC, score DESC;
-- 包含判断
SELECT * FROM demo ORDER BY CASE WHEN user_id IN (2) THEN 10 END DESC, score DESC;
-- 正则判断
SELECT * FROM demo ORDER BY CASE WHEN user_id REGEXP '[2]' THEN 10 END DESC, score DESC;

  以上语句查询结果均为下图:

实际上,CASE还有很多妙用,用在SELECT作用域、用在WHERE作用域、用在ORDER作用域,都是可以大展身手的好地方。

-- 添加查询结果标记位,
SELECT id, user_id, score, CASE WHEN score > 90 THEN '优秀' WHEN score > 80 THEN '合格' ELSE '不合格' END AS level FROM demo ORDER BY score DESC;

-- 千人千面的判断,用户为VIP时,只要80就算优秀
SELECT id, user_id, score, '优秀' AS level FROM demo WHERE CASE WHEN user_id in (2) THEN score > 80 ELSE score > 90 END ORDER BY score DESC;

使用 FIELD 自定义排序方式

  开发中或多或少会有这样的需求,用户定义了排序的方式,而且并不一定在逻辑上有序。以本博客为例,我们需要按user_id 2 →\rightarrow→ 3 →\rightarrow→ 1的顺序排列,且不影响分数倒序的基础,此时可以使用FIELD来自定义排序方式。

-- 单列的自定义排序
SELECT * FROM demo ORDER BY FIELD(user_id, 2, 3, 1) ASC, score DESC;-- 多列的自定义排序
SELECT * , CONCAT(score, user_id) as flag FROM demo ORDER BY FIELD(flag, "822", "812", "993", "893", "921", "751") ASC, created_at DESC

注意:实际上,FIELD(str, str1, str2, str3) 返回str在比较列表中的排位,不在则返回0

使用 IF ELSE

  IF函数也能定义一些方便的查询,此处不做赘述。

SELECT id, user_id, score, IF(score > 90, '优秀', '其他') AS level FROM demo ORDER BY score DESC;

MySQL中的查询小技巧相关推荐

  1. Mysql中分页查询两个方法比较

    mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1; SELECT a FROM f ...

  2. mysql中如何求出学生人数,mysql中如何查询同时参加计算机考试和英语考试的学生人数...

    mysql中如何查询同时参加计算机考试和英语考试的学生人数 mysql中如何查询同时参加计算机考试和英语考试的学生人数 mysql中如何查询同时参加计算机考试和英语考试的学生人数 学生信息表 学生成绩 ...

  3. mysql distinct 优化_Mysql应用分析MySQL中优化distinct的技巧

    <MysqL应用分析MysqL中优化distinct的技巧>要点: 本文介绍了MysqL应用分析MysqL中优化distinct的技巧,希望对您有用.如果有疑问,可以联系我们. sql用于 ...

  4. mysql distinct 慢_分析MySQL中优化distinct的技巧

    有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user ...

  5. Linux使用及管理中的一些小技巧

    Linux使用及管理中的一些小技巧 如何制作应急启动盘 在安装Linux时系统会提示制作一张应急启动盘, 这时一定要选择制作, 以便在今后 系统由于故障不能正常启动时用来恢复系统. 但有时忘了在安装时 ...

  6. mysql 查询最近24小时,mysql中怎么查询最近24小时、昨天、最近7天、下周、最近30天、下月的数据...

    mysql中如何查询最近24小时.昨天.最近7天.上周.最近30天.上月的数据 在数据表中使用date列保存yyyy.MM.dd HH:MM:SS格式的时间记录,mysql中如何查询最近24小时.昨天 ...

  7. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示.  比如 SELECT * FROM [user ...

  8. mysql自定义序号_MySQL数据库之在mysql中给查询的结果添加序号列

    本文主要向大家介绍了MySQL数据库之在mysql中给查询的结果添加序号列 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 一:第一种: select   (@i:=@i+1)  ...

  9. mysql 中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...

  10. mysql中模糊查询的四种用法

    转载自  https://www.cnblogs.com/songfayuan/articles/7290158.html 下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可 ...

最新文章

  1. 第6章 RTX 操作系统源码方式移植
  2. linux go 安装
  3. 软考-信息系统项目管理师-项目采购管理
  4. 聊聊高并发(二)结合实例说说线程封闭和背后的设计思想
  5. 雅虎与软银构和:拟出售雅虎日本35%股份
  6. Netweaver和CloudFoundry是如何运行Web应用的?
  7. 华为谷歌互利合作曝光:或将推Nexus手表
  8. c++ loadlibrary 初始化对象_C++构造函数和初始化表
  9. MySQL 加锁处理分析(二)
  10. eurekaAutoServiceRegistration 异常
  11. 13、XSI,信号量简介
  12. power-law 之Zipf
  13. 免费学plc的手机app_PLC学吧APP
  14. 第七次人口普查数据可视化分析实战——基于pyecharts(含数据和源码)
  15. Python写一个小小的项目监控
  16. java word书签_JAVA 创建移除Word书签
  17. iPhone 快捷指令 文本朗读
  18. 迅捷路由虚拟服务器设置,迅捷 FWR310 无线路由器端口映射设置指南
  19. 金融去杠杆环境下,请聆听麦子金服财富投资者给出的答案
  20. 图像风格迁移-DSTN

热门文章

  1. SpringBoot+H5微信登陆(网页)
  2. 交换机 Port-Channel(端口汇聚)的 配置
  3. PS 宏使用方法记录
  4. 记录一下学习EFCore中的基础知识
  5. Unknown host ‘raw.githubusercontent.com‘. You may need to adjust the proxy settings in Gradle
  6. Word 利用 VBA 批量设置图片格式
  7. (转)sonicstage 完整删除的方法
  8. 在团购网上空手赚钱项目,你敢做就敢赚!
  9. [高项]管理沟通VS控制沟通
  10. 【推荐】到伊甸园玩体感游戏吧!