Mysql中模擬rownum完成行列轉換

2021-08-31 05:58:03 字數 1288 閱讀 1638

環境:

create table ff(f1 varcahr(10), f2 int);

insert into ff values ('a', round(rand()*100));

insert into ff values ('a', round(rand()*100));

insert into ff values ('a', round(rand()*100));

需要執行一條sql語句得到一行記錄 'a' , '98,44,55'

語句:set @row:=0;

select tmp.f1, concat(max(tmp.a),',',max(tmp.b),',',max(tmp.c)) as 'all'

from (

select

@row:=@row+1,

f1,

case when @row=1 then f2 else 0 end as a,

case when @row=2 then f2 else 0 end as b,

case when @row=3 then f2 else 0 end as c

from ff group by @row

) as tmp group by tmp.f1;

思路:這個是典型的行轉列,然後再concat連成字串

step1: 在表上新增rowid

select @row:=@row+1, f1,f2 from ff;

step2: 對rowid進行分組

select @row:=@row+1, f1,f2 from ff group by @row

step3: 新增以後用來合成的目標列

select @row:=@row+1, f1,0 as a, 0 as b, 0 as c from ff group by @row

step4: 對於rowid=1的分組, a列取f2值, b,c都是0; 對於rowid=2的分組, a,c列取0, b取f2的值... 這裡的case when就是行轉列的法寶

select

@row:=@row+1,

f1,

case when @row=1 then f2 else 0 end as a,

case when @row=2 then f2 else 0 end as b,

case when @row=3 then f2 else 0 end as c

from ff group by @row

step5: 最後再取max,並且concat

MySQL中的ROWNUM的實現

mysql 幾乎模擬了 oracle,sql server等商業資料庫的大部分功能,函式。但很可惜,到目前的版本 5.1.33 為止,仍沒有實現rownum這個功能。下面介紹幾種具體的實現方法.建立實驗環境如下 mysql create table tbl id int primary key,co...

mysql中實現rownum,對結果進行排序

其中的乙個問題就是但是用rownum函式的時候發現mysql裡面沒有,所以只能用曲線救過的方式如下 select rownum rownum 1 as rownum,user.from user,select rownum 0 r 效果圖 由於是通過曲線救過方式實現,所以肯定沒有oracle自身實現...

Mysql的Rownum使用示例

1,顯示當前查詢結果的行號 select rownum rownum 1 as rownum,e.from select rownum 0 r,employee e 顯示結果如下 2,按部門分組並按年齡降序排序並顯示排名 select if dept e.deptno,rank rank 1,ran...