MySQL对列排序,分组排序

来源:互联网 发布:javascript编程艺术 编辑:程序博客网 时间:2024/05/18 03:12

除了平时做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


   

如上,根据关键字分成了四组,然后有四次排序。

原创粉丝点击