日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql实现row_number()和row_number() over(partition by)

發(fā)布時間:2025/7/14 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql实现row_number()和row_number() over(partition by) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

row_number() 僅僅是價格排序字段

select @rownum := @rownum + 1 as rn, t.*from (select @rownum := 0) r, test_table tselect @rank:=@rank+1 as rank ,t.* from (select @rank:=0) r, DM_GOA.dm_goa_fin_inv_mly_d t;

解釋:給test_table里的數(shù)據(jù)設置行號, rn是行號

?

row_number() over(partition by)

select if(@uid = t.user_id and @cid = t.city_id,@rank := @rank + 1,@rank := 1) as rank,t.*,@uid := t.user_id,@cid := t.city_idfrom (select @uid := null, @cid := null, @rank := 0) r,(select user_id, city_id, city_name, idfrom t_user_cityorder by user_id, city_id, id) t;

解釋:對t_user_city表按照user_id,city_id兩個字段做分組設置行號,rank是分組的行號,order by里一定要有兩個分組字段及第三個排序字,上面if 也可以用case when

SELECT *FROM (SELECTF.PARTY_ID AS PARTY_ID,F.ALL_COUNT AS ALL_COUNT,F.SU AS SU,CASEWHEN @PARTY_ID != PARTY_ID THEN@ROWNUM := 1ELSE@ROWNUM := @ROWNUM + 1END AS ROWNUM,@PARTY_ID := PARTY_ID AS PARTY_ID12FROM (SELECT @F.PARTY_ID := “”) c,(SELECT @ROWNUM := 0) r,(SELECTE.PARTY_ID AS PARTY_ID,E.SU AS SU,E.ALL_COUNT AS ALL_COUNTFROM (SELECTc.PARTY_ID AS PARTY_ID,COUNT(*) AS SU, d.AMT AS ALL_COUNT FROM dpf_ckaccno_dtl d JOIN dpf_ckaccno cON d.ACC_NO = c.DM01ACCTWHERE d.CRDFLG = ‘D’GROUP BY c.PARTY_ID, d.AMT) EORDER BY E.PARTY_ID,E.SU DESC,E.ALL_COUNT DESC) F) GWHERE G.ROWNUM <= 3

說明:1、(SELECT @ROWNUM := 0)r 用于定義變量并初始化,后面是命別名,此處不能省略,不然會報錯。

2、 @PARTY_ID := PARTY_ID AS PARTY_ID12 此處是把當前行值賦值給PARTY_ID 變量,前面(SELECT @F.PARTY_ID := “”) c,已經(jīng)將其初始化為空串

3、CASE

? ? ? ? ? ?WHEN @PARTY_ID != PARTY_ID THEN

? ? ? ? ? ? ? ? ? ? ?@ROWNUM := 1

? ? ? ? ? ? ? ? ? ?ELSE

? ? ? ? ? ? ? ? ? @ROWNUM :=@ROWNUM + 1

? ? ? ? ? ? ? ? END AS ROWNUM, – 此處通過case when 條件句來判斷變量值與當前PARTY_ID是否相等來,不等說明是新的PARTY_ID,ROWNUM 就為1,否則就+1

4、通過這個sql,我們可以發(fā)現(xiàn)mysql在sql語句中使用變量時,初始化的東西放到from語句的后面,使變量的變化語句要放到查詢結(jié)果里面,這里的原因可能是跟數(shù)據(jù)庫管理系統(tǒng)解析一個sql的順序有關系

?

? ? ? ? ? ? ?F.PARTY_ID AS PARTY_ID,
? ? ? ? ?F.ALL_COUNT AS ALL_COUNT,
? ? ? ? ?F.SU AS SU, ? ? ?

PARTY_ID? ? ? ? ALL_COUNT? ?SU? ROW_NUM? ?PARTY_ID_12

102902? ? ? ? ? ? ? ? ?5000? ? ? ? ? ? 18? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? 102902

102902? ? ? ? ? ? ? ? ?2000? ? ? ? ? ? 18? ? ? ? ? ?2? ? ? ? ? ? ? ? ? ? ? 102902

102902? ? ? ? ? ? ? ? ?2? ? ? ? ? ? ? ? ? ?18? ? ? ? ? 3? ? ? ? ? ? ? ? ? ? ? 102902

104631? ? ? ? ? ? ? ? ?4900? ? ? ? ? ? ?12? ? ? ? ??1 ? ? ? ? ? ? ? ? ? ? ?104631

104631? ? ? ? ? ? ? ? ?500? ? ? ? ? ? ? ?12? ? ? ? ? ?2? ? ? ? ? ? ? ? ? ? ?104631

104631? ? ? ? ? ? ? ? ?2000? ? ? ? ?? ? ?6? ? ? ? ? ? 3? ? ? ? ? ? ? ? ? ? ?104631

104658? ? ? ? ? ? ? ? ?5000? ? ? ? ? ? 192? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ?104658

104658? ? ? ? ? ? ? ? ?2000? ? ? ? ? ? 126? ? ? ? ? ? 2? ? ? ? ? ? ? ? ? ? ?104658

104658? ? ? ? ? ? ? ? ?1000? ? ? ? ? ? ? 48? ? ? ? ? ? 3? ? ? ? ? ? ? ? ? ? ?104658

總結(jié)

以上是生活随笔為你收集整理的mysql实现row_number()和row_number() over(partition by)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。