環境:
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...