鍍金池/ 問答/數(shù)據(jù)庫/ mysql如何標記某字段值第幾次重復出現(xiàn)

mysql如何標記某字段值第幾次重復出現(xiàn)

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

現(xiàn)在想通過select查詢返回示例圖的這樣的結果,統(tǒng)計對應字段A的值第幾次重復出現(xiàn)。理想效果如圖:

目的是為了添加標簽,首次出現(xiàn)標注‘首次’,之后均標注‘再次’,同時也想展示該條記錄第幾次出現(xiàn)。

請問如何實現(xiàn)?非常謝謝!
圖片描述

回答
編輯回答
寫榮

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
這種寫法執(zhí)行效率會更高,也容易理解內在邏輯關系,同時當需要對次數(shù)進行分類整理時,case when寫起來也比較簡單。

2017年2月8日 12:14
編輯回答
獨白

你好,我也是和你碰到差不多情況,我摸索出來了,我將方法告訴你希望能幫助到你
表結構,A表有一個id自增長類型的(必須有一個肯定不同的字段)
語句執(zhí)行出來的結果是這樣的

圖片描述

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

2018年7月31日 23:25
編輯回答
安若晴

能簡單介紹下你的應用場景么?因為就此問題,解決方法從不同角度有很多樣


概述

根據(jù)你的描述,我建議你使用redis,其實就是實現(xiàn)一個計數(shù)器功能(比如大型網(wǎng)站的點贊功能,文章ID就是你的A,點贊次數(shù)就是你的B)

具體實現(xiàn)

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

例子

Redis Incr 命令將 key 中儲存的數(shù)字值增一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCR 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內。
示例:

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    # 數(shù)字值在 Redis 中以字符串的形式保存
"11"

實踐證明

我們有一個web應用,我們想記錄每個用戶每天訪問這個網(wǎng)站的次數(shù)。
web應用只需要通過拼接用戶id和代表當前時間的字符串作為key,每次用戶訪問這個頁面的時候對這個key執(zhí)行一下incr命令。


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

直接獲取每個A的最大B不就好了,B=1表示首次,B>1肯定不是首次 ? 是這個邏輯么

2018年4月10日 10:19