首页 > 其他 > 详细

case when 实例

时间:2020-09-23 20:53:03      阅读:44      评论:0      收藏:0      [点我收藏+]

要求:

技术分享图片

 

 将上面这张数据库中的表,经过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;

 

case when 实例

原文:https://www.cnblogs.com/lc10086/p/13720160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!