您的位置:首页 > 数据库 > MySQL

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

   


如上,根据关键字分成了四组,然后有四次排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: