mysql多行變多列(衍生形式)

來源:互聯網
上載者:User

標籤:

我的這篇文章整理了mysql多行變多列的2種常見形式:http://blog.csdn.net/rainyspring4540/article/details/50231435

這裡就不贅述了,下面說下它更複雜的衍生形式:

表結構:

create table student (  name varchar(20) not null, -- 姓名  course varchar(20) not null,-- 科目  score int ,-- 成績  bossEvaluate varchar(20),-- 校長評估  familyEvaluate varchar(20),-- 家族評估  societyEvaluate varchar(20), -- 社會評估  primary key(name,course));insert into student values('小王','數學','10','A','B','C');insert into student values('小王','語文','20','A','B','C');insert into student values('小王','英語','30','A','B','C');insert into student values('小花','數學','10','A','A','A');insert into student values('小花','語文','40','A','A','C');insert into student values('小花','英語','10','A','B','C');insert into student values('小虎','數學','25','C','B','C');insert into student values('小虎','語文','10','A','C','C');insert into student values('小虎','英語','10','A','B','C');

形如:


下面的是一般的產生展現和sql,貼出來就不贅述了:

SELECT name ,max(if(course='數學',score,0)) as '數學' ,max(if(course='語文',score,0)) as '語文' ,max(if(course='英語',score,0)) as '英語' FROM ds_wjytest2.student group by name;
我這裡用的是if不是case when,其實效果都差不多;


下面是更複雜點的衍生展現和sql:

SELECT name ,max(if(course='數學',score,0)) as '數學' ,max(if(course='數學',bossEvaluate,null)) as '校長評估' ,max(if(course='數學',familyEvaluate,null)) as '家族評估' ,max(if(course='數學',societyEvaluate,null)) as '社會評估',max(if(course='語文',score,0)) as '語文' ,max(if(course='語文',bossEvaluate,null)) as '校長評估' ,max(if(course='語文',familyEvaluate,null)) as '家族評估' ,max(if(course='語文',societyEvaluate,null)) as '社會評估',max(if(course='英語',score,0)) as '英語' ,max(if(course='英語',bossEvaluate,null)) as '校長評估',max(if(course='英語',familyEvaluate,null)) as '家族評估' ,max(if(course='英語',societyEvaluate,null)) as '社會評估'FROM ds_wjytest2.student group by name;

是不是感覺if函數很好用。。。有些領導就喜歡這種冗長的報表,順便說下:如果是大資料匯出這樣結構的資料,最好不要使用這個語句,如果資料量太大(10w),或者類似這樣的伴隨類別欄位(這裡科目是類別欄位)的延伸欄位(家長評價、社會評價、小校長評價)太多會是效能極速下降;

我測試解決大資料匯出這樣結構採用分頁匯出(帶排序欄位),並且每次分頁讀取時先緩衝一部分基本表的資訊,由於是帶排序的,所有緩衝的命中率很高;已經命中的清除緩衝,未命中的庫裡讀取這個記錄,並在此讀入一部分資訊到緩衝(細節以後單寫篇文章。。。)

mysql多行變多列(衍生形式)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.