标签:case 语句 name SUM course score sql null
为什么会有本文?
问题:需要从成绩表里面获取成绩单(排名,单科成绩,总分)
处理:按名称分组,SUM聚合运算获取总分,单科成绩需要给定条件来筛选,包含分组语句筛选(case语句或if函数)的字段必须为分组字段或聚合字段,所以单科成绩还需要使用聚合函数(如SUM)包裹一层;
优点:通过,分组+聚合+筛选,实现,列形式的数据转化为行形式的数据;方便将源数据结构转化为自己需要的数据结构,从而进行其它操作;
步骤:
- 执行建表语句
- 执行插入语句
- 执行查询语句
CREATE TABLE `grade` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`course` varchar(255) DEFAULT NULL,
`score` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO grade VALUES
(null, "王五", "语文", 100),
(null, "王五", "数学", 90),
(null, "王五", "英语", 80),
(null, "李四", "语文", 70),
(null, "李四", "数学", 60),
(null, "李四", "英语", 50);
-- 方式1:使用case语句
SELECT
name,
SUM(CASE WHEN course='语文' THEN score ELSE 0 END) AS 语文,
SUM(CASE WHEN course='数学' THEN score ELSE 0 END) AS 数学,
SUM(CASE WHEN course='英语' THEN score ELSE 0 END) AS 英语,
SUM(score) AS 总分
FROM grade
GROUP BY name
ORDER BY SUM(score) DESC;
-- 方式2:使用if函数实现
SELECT
name,
SUM(IF(course='语文', score, 0)) 语文,
SUM(IF(course='数学', score, 0)) 数学,
SUM(IF(course='英语', score, 0)) 英语,
SUM(score) 总分
FROM grade
GROUP BY name
ORDER BY SUM(score) DESC;
标签:case,语句,name,SUM,course,score,sql,null 来源: https://www.cnblogs.com/bonus_scene/p/16366576.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。