溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL自定義變量實現row_number分析函數的問題示例

發布時間:2021-10-27 16:50:25 來源:億速云 閱讀:189 作者:小新 欄目:MySQL數據庫

小編給大家分享一下MySQL自定義變量實現row_number分析函數的問題示例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

MySQL經常用自定義變量實現復雜查詢,比如row_number按組加行號的功能等.

但是這里面存在一個天坑.不可謂不深

先看試驗

create table tmp_num(
	gid int,
    score int);
create table tmp_var(
	gid varchar(32),
    score int);
    
insert into tmp_num
select  
id%4,
ceil(1000*rand())
from nums where id<=20;
insert into tmp_var select concat('組',gid),score from tmp_num;

MySQL自定義變量實現row_number分析函數的問題示例

MySQL自定義變量實現row_number分析函數的問題示例

兩個表, 只是分組的類型不一樣,一個分組是 字符串,另外一個是整形.

首先查詢分組是整形的情況

select  
t1.gid,t1.score,
case when @gid=gid then @rn:=@rn+1 when @gid:=gid then @rn:=1 else @rn:=1 end rn
from (
	select * from tmp_num ,(select @gid:=0,@rn:=0) vars order by gid,score
) t1;

MySQL自定義變量實現row_number分析函數的問題示例

如果其他的程序使用 該自定義變量查詢字符串分組的情況,則會出現bug

select  
t1.gid,t1.score,
case when @gid=gid then @rn:=@rn+1 when @gid:=gid then @rn:=1 else @rn:=1 end rn
from (
	select * from tmp_var ,(select @gid:='',@rn:=0) vars order by gid,score
) t1;

MySQL自定義變量實現row_number分析函數的問題示例

在多個項目共用連接池的情況下,萬一出現這種情況,極難排查

等排查出來,生產環境的錯誤都不知道持續多少天了,

那時候就尷尬了,錯誤排除了,人也被開除了

所以還是 58處理的方式比較好,一刀切的禁用自定義變量

看完了這篇文章,相信你對“MySQL自定義變量實現row_number分析函數的問題示例”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女