转载自:
http://blog.163.com/dreamman_yx/blog/static/26526894201121595846270/
示例一、
表数据:
查询结果:
方法一:
SELECT
t.name,
(SELECT SUM(h.amount) FROM test2 h WHERE h.mold = 'm1' AND h.name = t.name) m1,
(SELECT SUM(h.amount) FROM test2 h WHERE h.mold = 'm2' AND h.name = t.name) m2,
(SELECT SUM(h.amount) FROM test2 h WHERE h.mold = 'm3' AND h.name = t.name) m3
FROM test2 t
GROUP BY t.name
方法二:
SELECT
t.name,
SUM(CASE WHEN t.mold='m1' THEN t.amount END) m1,
SUM(CASE WHEN t.mold='m2' THEN t.amount END) m2,
SUM(CASE WHEN t.mold='m3' THEN t.amount END) m3
FROM test2 t
GROUP BY t.name
实例二、
表数据:
查询结果:
-- 静态SQL,指课程只有语文、数学、英语这三门课程。
方法一:
SELECT
t.name,
MAX(CASE t.course WHEN '语文' THEN t.score ELSE 0 END) yw,
MAX(CASE t.course WHEN '数学' THEN t.score ELSE 0 END) sx,
MAX(CASE t.course WHEN '英语' THEN t.score ELSE 0 END) yy
FROM test3 t
GROUP BY t.name
方法二:
SELECT
t.name,
SUM(IF(course = '语文', score, 0)) yw,
SUM(IF(course = '数学', score, 0)) sx,
SUM(IF(course = '英语', score, 0)) yy
FROM test3 t
GROUP BY t.name
建表语句及数据:
CREATE TABLE `test2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL COMMENT '名字',
`mold` varchar(32) DEFAULT NULL COMMENT '类型',
`amount` int(11) DEFAULT NULL COMMENT '数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
insert into `test2` (`id`, `name`, `mold`, `amount`) values('1','小白','m1','1');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('2','小白','m2','2');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('3','小白','m3','3');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('4','小黑','m1','4');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('5','小黑','m2','5');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('6','小白','m1','6');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('7','小白','m3','7');
insert into `test2` (`id`, `name`, `mold`, `amount`) values('8','小黑','m3','1');
CREATE TABLE `test3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL COMMENT '姓名',
`course` varchar(32) DEFAULT NULL COMMENT '课程',
`score` int(11) DEFAULT NULL COMMENT '成绩',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `test3` (`id`, `name`, `course`, `score`) values('1','小白','语文','99');
insert into `test3` (`id`, `name`, `course`, `score`) values('2','小白','数学','88');
insert into `test3` (`id`, `name`, `course`, `score`) values('3','小白','英语','84');
insert into `test3` (`id`, `name`, `course`, `score`) values('4','小黑','语文','89');
insert into `test3` (`id`, `name`, `course`, `score`) values('5','小黑','数学','95');
insert into `test3` (`id`, `name`, `course`, `score`) values('6','小黑','英语','98');