mysql高级排序&高级匹配查询示例

  在大多数应用场景下,我们使用mysql进行查询时只会用到‘=‘, ‘>‘ , ‘<‘ , in, like 等常用的方法,看起来,大多数情况下,已经足以应付我们的小型应用了。不过,在一些特殊场景,则需要特殊的查询方式了。

  1. 根据状态来排序的查询

    假设现在一个记录有四种状态,未处理(0)、正在处理(2)、处理成功(1)、处理失败(4),之所以他们的值是这个样子,是因为我们一般情况下是不会用它去排序,所以自然的就想到这样的一些值赋予意义。但是,在排序的时候怎么处理呢? 假如要求的先后顺序是这样的:未处理>处理失败>正在处理>处理成功, 我能想到的就是,假设它们这些状态就是按照要求的排序的值去依次增加的,那就只需要一个order by 该字段即可。具体实现如下:

select * from tab_task b order by (CASE b.deal_status WHEN 0 THEN 10 WHEN 2 THEN 30 WHEN 1 THEN 40 WHEN 4 THEN 20  ELSE 40 END) ASC,b.add_time desc     //按照所需排序值,依次赋值

如果是要根据某个计算的值来排序,如按平均成绩排序,则实现如下:

SELECT * FROM score b GROUP BY uid ORDER BY AVG(b.`score`) DESC;    //直接计算得出排序值,使用RAND()可以得到随机的排序

  2. 比较复杂的模糊查询

    有时,我们需要从某字段中筛选符合条件的值,但是该值又不是一个独立的字段,这时就需要一些高级的模糊查询(正则)。

如,需要查询某个值大于0的记录,实现如下:

SELECT * FROM tab_day_data WHERE retention_days_full REGEXP ‘.*rd1=([0][1-9]+|[1-9][0-9]*).*‘;      //查询rd{x}大于0的记录,其中rd可能是许多个类似的不重要的值,被储存至一个字段,同理于其他

mysql正则语法,如下:

// .  表示匹配任意一个字符
// | 作为OR操作符,表示匹配其中之一
// [ ] 匹配任何单一字符
// [:a;num:]    任意字母和数字(同 [a-zA-Z0-9])
// [:alpha:]     任意字符(同 [a-zA-Z])
// [:blank:]     空格和制表(同 [\\t])
// [:cntrl:]        ASCII控制字符(ASCII 0到31和127)
// [:digit:]       任意数字(同[0-9])
// [:graph:]    与["print:] 相同,但不包括空格
// [:lower:]      任意小写字线(同 [a-z])
// [:print:]        任意可打印字符
// [:punct:]      既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
// [space:]       包括空格在内的任意空白字符(同 [\\f\\n\\t\\r\\v])
// [:upper:]     任意大小字母(同 [A-Z])
// [:xdigit:]      任意十六进制数字(同 [a-fA-F0-9])
// 元字符  .*?+{m}{m,}{m, n}

  语法与正宗的正则不太一致,但大体原理是一致的。

  用mysql做复杂的匹配,虽然可以实现,但是相对来说效率低下,最好还是使用独立字段的形式进行查询,用空间换取时间!

  

  问?

  mysql 分表之后(比如按年分表,多个相关联表同步拆分),查询应该怎样做才好?

时间: 2024-10-22 02:23:50

mysql高级排序&高级匹配查询示例的相关文章

MYSQL结果排序、分页查询、聚合函数

结果排序 使用ORDER BY子句将查询记录进行排序, ASC : 升序,缺省. DESC : 降序. ORDER BY 子句出现在SELECT语句的最后. 格式: SELECT <selectList> FROM table_name WHERE 条件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...; ------------------------------------------------------- 按单列排序: 需求:选择id,货品名称,分类

mysql中的高级查询

mysql中的高级查询 以前学习的查询语法:   select 字段名 from 表名 where 条件   其实,查询的语法变化很多: 1. select 可以查询表达式, 表达式就是 运算符+操作数. 比如 1 + 1   2 * 3  2-1+5*9   Math.random() * 1; 可以看出,数据库中,字符串+字符串不是拼接,而是计算加法, 试一试,拿着'1' + 'a123'. 扩充,如果非要让两个字符串是拼接,咋办? 2. 表的别名     其实列也可以起别名:   3. d

Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的肯定比我的好,不过,这个是Solr系列文章,会从Solr的基础入门讲到实际开发中的分页,高亮,Facet查询等高级用法.所以,基础的入门也会涉及一些,望大家见谅.我用这么多篇文章,来总结Solr 也是为了将Solr 的 安装,配置,开发等等,整个过程的资料,都能总结汇集到一起,这样不管是懂Solr还

mysql like 匹配查询出不正确中文的解决办法

本文讲述mysql使用like语句时,匹配查询出不正确中文的解决办法 mysql like 搜索的时候发现,用 select title from tb_name where title like '%a%' 的时候出来的结果除了包含a的名字外连包含中文“新”的名字也出现在搜索结果里面,这令我想弄清楚mysql的匹配模式和规则到底是怎么样的,另外在匹配的时候正则表达式也很常用! 出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认

Oracle 高级排序函数 和 高级分组函数

高级排序函数: [ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx) 1.row_number() 连续且递增的数字 1 2 3 4   row_number() over (partition by xx order by xx )    --学生表中按照所在专业分组,同专业内按成绩倒序排序,成绩相同则按学号正序排序,并给予组内等级select row_number() over(partition b

mysql模糊匹配查询like,regexp,in

mysql模糊匹配查询like,regexp,in 摘要 内容比较简单,无摘要. 关键词 模糊查询  like  regexp  in  contact 正文 下图是示例用到的数据表信息 MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式 一.SQL模式 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的.

MySQL进阶5--分组排序和分组查询 group by(having) /order by

MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数, 只处理数值型,都绝对忽略NULL值(avg处理时统计的个数没有null项) max ,min ,可以求字符串最大最小 ,可以匹配日期,都绝对忽略NULL值 count ,不计算NULL ,不把null算进数里 #2. 参数支持类型 SELECT MIN(last_name) ,MAX(last_

MySQL基本查询示例(2)

注:本博文基于上一篇博文中的表进行查询,上篇博文:MySQL基本查询示例(1). 1.查询fruits表中每个s_id对应的所有f_name值 <!--以组来进行紧凑--> mysql> select s_id,group_concat(f_name) as name from fruits group by s_id having count(f_name) > 1; 返回结果如下: 2.统计相同s_id值的行有多少? mysql> select s_id,count(*)

数据结构之高级排序算法

一.希尔排序 希尔排序(缩小增量法) 属于插入类排序,由Shell提出,希尔排序对直接插入排序进行了简单的改进:它通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项大跨度地移动,当这些数据项排过一趟序之后,希尔排序算法减小数据项的间隔再进行排序,依次进行下去,进行这些排序时的数据项之间的间隔被称为增量,习惯上用字母h来表示这个增量. 具体代码实现: 1 package data.struct.algorithm; 2 3 //高级排序算法之希尔排序 4 class