mysql如何标记某字段值第几次重复出现

有表table_x,字段A有重复值:

现在想通过select查询返回示例图的这样的结果,统计对应字段A的值第几次重复出现。理想效果如图:

目的是为了添加标签,首次出现标注‘首次’,之后均标注‘再次’,同时也想展示该条记录第几次出现。

请问如何实现?非常谢谢!
图片描述

阅读 7.3k
3 个回答

你好,我也是和你碰到差不多情况,我摸索出来了,我将方法告诉你希望能帮助到你
表结构,A表有一个id自增长类型的(必须有一个肯定不同的字段)
语句执行出来的结果是这样的

图片描述

select A.id,A.xmmc,(select count(*) as num from 表A where id<=A.id and A.xmmc = xmmc) as 次数 from 表A A

能简单介绍下你的应用场景么?因为就此问题,解决方法从不同角度有很多样


概述

根据你的描述,我建议你使用redis,其实就是实现一个计数器功能(比如大型网站的点赞功能,文章ID就是你的A,点赞次数就是你的B)

具体实现

用INCR命令,命令说明见http://redisdoc.com/string/in...
INCR A,其中A就是redis的key,也就是你表中的字段A

例子

Redis Incr 命令将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
示例:

127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379> get num    # 数字值在 Redis 中以字符串的形式保存
"11"

实践证明

我们有一个web应用,我们想记录每个用户每天访问这个网站的次数。
web应用只需要通过拼接用户id和代表当前时间的字符串作为key,每次用户访问这个页面的时候对这个key执行一下incr命令。


select A,max(B) from table_x group by A, 获取每个A的最大B

直接获取每个A的最大B不就好了,B=1表示首次,B>1肯定不是首次 ? 是这个逻辑么

select A.id,A.xmmc,count(distinct A1.id) cnt from A left join A1 on A.id<=A1.id and A.xmmc=A1.xmmc group by A.id
这种写法执行效率会更高,也容易理解内在逻辑关系,同时当需要对次数进行分类整理时,case when写起来也比较简单。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题