// 建表语句:
CREATE TABLE `course` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`sid` int(11) DEFAULT NULL,
`course` varchar(255) DEFAULT NULL,
`score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
// 插入数据
// 字段解释:id, 学号, 课程, 成绩
INSERT INTO `course` VALUES (1, 1, 'yuwen', 43);
INSERT INTO `course` VALUES (2, 1, 'shuxue', 55);
INSERT INTO `course` VALUES (3, 2, 'yuwen', 77);
INSERT INTO `course` VALUES (4, 2, 'shuxue', 88);
INSERT INTO `course` VALUES (5, 3, 'yuwen', 98);
INSERT INTO `course` VALUES (6, 3, 'shuxue', 65);
求:所有数学课程成绩 大于 语文课程成绩的学生的学号
id sid course score
1 1 yuwen 43
2 1 shuxue 55
3 2 yuwen 77
4 2 shuxue 88
5 3 yuwen 98
6 3 shuxue 65
7 3 yingyu 88
这个题目我们如果能将数据转换为下面这种形式,是不是直接就能使用简单的select......where.......这种sql进行查询了
sid yuwen shuxue yingyu
1 43 55 0
2 77 88 0
3 98 65 77
考虑一下,这不就是行转列操作吗
第一步:进行行转列:
select sid,
case course when "yuwen" then score else 0 end as yuwen,
case course when "shuxue" then score else 0 end as shuxue
from course;
最后得到结果:
select sid from course where shuxue > yuwen;