mysql中的列轉行操作示例和帶統計的列轉行統計

2021-09-21 17:48:58 字數 1953 閱讀 9310

首先建表並匯入資料:

create tablegrade(

studycodevarchar(20) not null default 『』 comment 『學號』,

subjectsvarchar(20) not null,

scoreint(20) not null

) engine=innodb default charset=utf8;

insert intogradevalues (『001』, 『數學』, 『120』);

insert intogradevalues (『002』, 『數學』, 『130』);

insert intogradevalues (『003』, 『數學』, 『125』);

insert intogradevalues (『001』, 『英語』, 『130』);

insert intogradevalues (『002』, 『英語』, 『140』);

insert intogradevalues (『003』, 『英語』, 『135』);

insert intogradevalues (『001』, 『國學』, 『110』);

insert intogradevalues (『002』, 『國學』, 『136』);

insert intogradevalues (『003』, 『國學』, 『145』);

資料如下:

純列轉行:方法1 sum(if()) ,這裡的if()做增加列操作

select

studycode 學號,

sum(if(subjects = 『國學』,score,0)) 國學,

sum(if(subjects = 『數學』,score,0)) 數學,

sum(if(subjects = 『英語』,score,0)) 英語

from rowandcol

group by studycode;

結果如下:

方法2.使用case when then else end也可以

select

studycode 學號,

sum(case when subjects = 『國學』 then score else 0 end) 國學,

sum(case when subjects = 『數學』 then score else 0 end) 數學,

sum(case when subjects = 『英語』 then score else 0 end) 英語

from grade

group by studycode;

二 帶統計的列轉行

select studycode,ifnull(subjects,『total』),sum(score) fromgradegroup by studycode,subjects with rollup ;

【其中,with rollup 在group分組欄位的基礎上再進行統計資料】

結果如下:

MySQL中的列轉行方法

資料如下 create table test id int 10 not null auto increment primary key,name varchar 20 default null,course varchar 20 default null,score float default 0...

day05 行轉列,列轉行操作示例

create table test tb grade id number 10 not null,user name varchar2 20 char course varchar2 20 char score float insert into test tb grade values 1,mic...

mysql 列轉行的技巧 分享

前言 由於很多業務表因為歷史原因或者效能原因,都使用了違反第一正規化的設計模式。即同乙個列中儲存了多個屬性值 具體結構見下表 這種模式下,應用常常需要將這個列依據分隔符進行分割,並得到列轉行的結果。表資料 idvalue 1tiny,small,big 2small,medium 3tiny,big...