MySQL对列排序,分组排序
2017-11-15 15:43
197 查看
除了平时做demo,第一次在项目中使用mysql,今天用到了分组排序,习惯性的想到之前oracle和DB2中用过row_number() over(partition by ......),果断使用over函数,然后mysql里面果断没有over函数。于是百度了解了一下,需要自己来记录序号,于是简单整理了一下。
首先试一下,简单的排序,类似于for循环,直接累加,即赋初值,累加。赋初值,@i := 0,累加@i := @i + 1。
具体的SQL如下
select (@i := @i + 1)rownum,b.* from (
selectt.spdf_path,doc_id,page,keyword,t.times from sign_record t group by id order bykeyword) b,(SELECT @i := 0) AS a;
如上,将查询结果进行排序从1到10
然后试一下分组排序
当用group by的时候,需要按照分组的列比较排序,当按照分组时候,如果分组数据相同那么序号累加,当分组数据不相同的时候,重新累加。
select (@i := case when @pre_keyword=keyword then @i + 1 else 1 end) rownum,b.*, @pre_keyword:=keyword from (
selectt.spdf_path,doc_id,page,keyword,t.times from sign_record t group by id order bykeyword
) b,(SELECT @i := 0, @pre_keyword:='') AS a;
如上SQL,分组列是keyword
1、 初始化"序号列"@i,"分组变化标记列"@pre_keyword,SELECT @i:= 0, @pre_keyword:=''
2、 "分组变化标记列"赋值为分组列,@pre_keyword:= keyword
3、 判断条件,累加还是重新计算,@i := case when @pre_keyword=keyword then@i + 1 else 1 end,如果"分组变化标记列"等于分组列,序号累加,否则说明是新的一组,"序号列"赋值1
如上,根据关键字分成了四组,然后有四次排序。
首先试一下,简单的排序,类似于for循环,直接累加,即赋初值,累加。赋初值,@i := 0,累加@i := @i + 1。
具体的SQL如下
select (@i := @i + 1)rownum,b.* from (
selectt.spdf_path,doc_id,page,keyword,t.times from sign_record t group by id order bykeyword) b,(SELECT @i := 0) AS a;
如上,将查询结果进行排序从1到10
然后试一下分组排序
当用group by的时候,需要按照分组的列比较排序,当按照分组时候,如果分组数据相同那么序号累加,当分组数据不相同的时候,重新累加。
select (@i := case when @pre_keyword=keyword then @i + 1 else 1 end) rownum,b.*, @pre_keyword:=keyword from (
selectt.spdf_path,doc_id,page,keyword,t.times from sign_record t group by id order bykeyword
) b,(SELECT @i := 0, @pre_keyword:='') AS a;
如上SQL,分组列是keyword
1、 初始化"序号列"@i,"分组变化标记列"@pre_keyword,SELECT @i:= 0, @pre_keyword:=''
2、 "分组变化标记列"赋值为分组列,@pre_keyword:= keyword
3、 判断条件,累加还是重新计算,@i := case when @pre_keyword=keyword then@i + 1 else 1 end,如果"分组变化标记列"等于分组列,序号累加,否则说明是新的一组,"序号列"赋值1
如上,根据关键字分成了四组,然后有四次排序。
相关文章推荐
- MYSQL复习笔记11-排序分组
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- mysql分组排序去数据的方式
- Java表格仿mysql实现基本操作(连接,分组排序,统计等)
- Mysql分组统计、排序、取前N条记录解决方案
- Mysql 利用group by 分组排序
- mysql 分组排序显示序列号 row_number()
- MySQL按最新时间分组排序的实现
- [MySQL]学习笔记- 用户行为表中,查询每个人的一条最新行为(分组 排序 取时间最大的一条记录)
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能.
- mysql中的先排序后分组
- mysql按照每天分组查询数据结果排序不是从1到31而是1后接10
- mysql: 实现row_number() over (partition by) 分组排序
- mysql 先排序再分组
- mysql 先排序后分组再排序查询数据
- mysql 分组后再排序
- mysql实现分组排序,获取第N条数据
- [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit
- Mysql 分组排序
- Mysql分组统计、排序、取前N条记录解决方案