MySQL对列排序,分组排序

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


   

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值