mysql分组排序

本文探讨了如何在MySQL查询中利用变量实现无分组的递增编号,以及针对特定字段进行分组排序。通过示例展示了在无分组查询中增加序列号的方法,并解释了为何在分组查询中需要配合`ORDER BY`才能得到预期结果。此外,还提供了多字段分组的解决方案,帮助读者深入理解MySQL中的分组和排序操作。
摘要由CSDN通过智能技术生成

无分组

select @rownum:=@rownum+1 as autoSeq,
sid,pid,oprimary,seq
from singlechoice,(select @rownum:=0) r
order by pid,sid
单字段分组

select (@i := case when @tableName=a.tablename then @i + 1 else 1 end ) as rowIndex,
a.*,(@tableName:=a.tablename)
from tablestyle a,(select @i:=0,@tableName:=’’) as t
group by tablename,fieldname
order by tablename,(@i := case when @tableName=a.tablename then @i + 1 else 1 end )
多字段分组

select (@i := case when @tableName=concat(a.dbname,a.tablename) then @i + 1 else 1 end ) as rowIndex,
a.*,(@tableName:=concat(a.dbname,a.tablename)) as temp
from tablestyle a,(select @i:=0,@tableName:=’’) as t
group by dbname,tablename,fieldname
order by dbname,tablename,(@i := case when @tableName=concat(a.dbname,a.tablename) then @i + 1 else 1 end )

后续补充实际运用:
上面是我查到的别人写的一些方法,但是实际使用过程中还是有区别的,
直接举例说明:
在这里插入图片描述
先实现一个简单的效果:递增编号,理解一下第一个点(无分组)

SELECT
@r:= @r + 1 AS rowNum,
a.*
FROM
tls_certificate a,( SELECT @r:= 0 ) b

查询结果:
在这里插入图片描述
可以看到前面增加了一列 rowNum 字段。

第二种,根据 certificate_type 字段 分组排序

根据上面的方法 我摸索试验出多种写法:

先来一段代码:

SELECT
@r:= case when @tableName=a.certificate_type then @r+1 else 1 end as rowNum,
@tableName:=a.certificate_type as temp,
a.*
from
tls_certificate a ,(select @r:=0 ,@tableName:=’’) b

结果:在这里插入图片描述
这时你会发现跟我们预想的结果不一样的,怎么rowNum 值都是1,而不是我们预期的根据 certificate_type 分组排序 显示结果 应该为 1,2,3

预期结果如下:
在这里插入图片描述
那怎么实现如上结果,不墨迹,直接上sql:

SELECT
@r:= case when @tableName=a.certificate_type then @r+1 else 1 end as rowNum,
@tableName:=a.certificate_type as temp,
a.*
from
tls_certificate a ,(select @r:=0 ,@tableName:=’’) b

**ORDER BY temp**

增加order by 字段, 重中之重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值