要求:
将上面这张数据库中的表,经过sql语句的编写,查找成下图类型的表
分析:如图可知,分为ABC三组,所以 group by name, 根据name分为三组,
分组后的样子为:
再分析:因为新表有四列,分别是 名字跟 基,爬,SQL 三科每人的分数,
我们可以创建一个新的基列,并只对人相应的stage进行赋值,值为score,再用聚合函数max得到同一组的最大值,因为 1>null,并且用case when的写法
所以可以这么些
max(case when stage=‘基‘ then score else null end)as ‘基‘
同理:
max(case when stage=‘爬‘ then score else null end)as ‘爬‘
max(case when stage=‘SQL‘ then score else null end)as ‘SQL‘
最终的语句为:
SELECT NAME,
MAX(CASE WHEN stage=‘基‘ THEN score ELSE NULL END )AS‘基‘,
MAX(CASE WHEN stage=‘爬‘ THEN score ELSE NULL END )AS‘爬‘,
MAX(CASE WHEN stage=‘SQL‘ THEN score ELSE NULL END )AS‘SQL‘
FROM scores GROUP BY NAME;
附上所有sql语句
SELECT id,NAME,
(CASE WHEN classid=1 THEN 2
WHEN classid=2 THEN 1
ELSE classid
END)AS A
FROM stu;
CREATE TABLE scores(NAME VARCHAR(3),stage VARCHAR(3),score INT);
INSERT INTO scores VALUES(‘A‘,‘基‘,1),(‘B‘,‘基‘,2),(‘C‘,‘基‘,2),(‘A‘,‘爬‘,2),(‘B‘,‘爬‘,3),(‘C‘,‘爬‘,1),(‘A‘,‘SQL‘,2),(‘B‘,‘SQL‘,2),(‘C‘,‘SQL‘,4);
SELECT NAME,
MAX(CASE WHEN stage=‘基‘ THEN score ELSE NULL END )AS‘基‘,
MAX(CASE WHEN stage=‘爬‘ THEN score ELSE NULL END )AS‘爬‘,
MAX(CASE WHEN stage=‘SQL‘ THEN score ELSE NULL END )AS‘SQL‘
FROM scores GROUP BY NAME;
原文:https://www.cnblogs.com/lc10086/p/13720160.html