mysql中的列转行操作示例和带统计的列转行统计

mysql中的列转行操作示例和带统计的列转行统计

首先建表并导入数据:
CREATE TABLE grade (

studyCode varchar(20) NOT NULL DEFAULT ‘’ COMMENT ‘学号’,

subjectS varchar(20) NOT NULL,

score int(20) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO grade VALUES (‘001’, ‘数学’, ‘120’);

INSERT INTO grade VALUES (‘002’, ‘数学’, ‘130’);

INSERT INTO grade VALUES (‘003’, ‘数学’, ‘125’);

INSERT INTO grade VALUES (‘001’, ‘英语’, ‘130’);

INSERT INTO grade VALUES (‘002’, ‘英语’, ‘140’);

INSERT INTO grade VALUES (‘003’, ‘英语’, ‘135’);

INSERT INTO grade VALUES (‘001’, ‘国学’, ‘110’);

INSERT INTO grade VALUES (‘002’, ‘国学’, ‘136’);

INSERT INTO grade VALUES (‘003’, ‘国学’, ‘145’);

数据如下:
SELECT * FROM grade ;
mysql中的列转行操作示例和带统计的列转行统计_第1张图片
纯列转行:方法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;
结果如下:
mysql中的列转行操作示例和带统计的列转行统计_第2张图片
方法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;

结果如下:
mysql中的列转行操作示例和带统计的列转行统计_第3张图片

二 带统计的列转行
SELECT studyCode,IFNULL(subjectS,‘total’),SUM(score) FROM grade GROUP BY studyCode,subjectS WITH ROLLUP ;
【其中,with rollup 在group分组字段的基础上再进行统计数据】
结果如下:
mysql中的列转行操作示例和带统计的列转行统计_第4张图片

https://www.cnblogs.com/mjbenkyo/p/7268242.html

你可能感兴趣的:(mysql,java)