SQL集合函数中case when then 使用技巧
那么在集合函数中它有什么用呢 ? 假设数据库有一张表名为student的表。 如果现在要你根据这张表,查出江西省男女个数,广东省男生个数,浙江省男女个数 怎么写SQL语句?即要生成下结果表 答案是:select sex ,count ( case province when ‘广东省’ then ‘广东省’ end )as 广东省 ,count ( case province when ‘江西省’ then ‘江西省’ end )as 江西省 ,count ( case province when ‘浙江省’ then ‘浙江省’ end )as 浙江省 from student gro 在SQL查询中,集合函数是用于对一组值进行操作并返回单个值的函数,例如COUNT(), SUM(), AVG(), MAX(), MIN()等。在本例中,我们将关注`CASE WHEN THEN`结构在集合函数中的应用,特别是如何利用它来统计数据。 `CASE WHEN THEN`语句在SQL中是一个条件表达式,它允许我们在一个查询中执行多条件判断。在这个场景中,`CASE WHEN THEN`被用来过滤和计数特定的条件。假设我们有一个名为`student`的表,包含`sex`(性别)和`province`(省份)字段,我们要根据这个表来统计不同省份的男女数量。 我们了解基础的SQL查询: 1. `SELECT sex FROM student;` 这个简单的查询将返回所有学生的性别。 2. `SELECT sex, COUNT(*) AS num FROM student GROUP BY sex;` 这个查询将返回每个性别的学生总数。 3. `SELECT sex, province, COUNT(*) AS num FROM student GROUP BY sex, province;` 这个查询将返回每个省份每个性别的学生总数。 接下来,我们将`COUNT(*)`与`CASE WHEN THEN`结合使用,以更精确地统计特定省份的男女数量: 4. 当我们使用`COUNT(province)`时,它会统计每个省份出现的次数,无论性别如何。但是,如果我们只对特定省份感兴趣,比如`浙江省`,我们可以写成: ```sql SELECT sex, COUNT(CASE WHEN province = '浙江省' THEN province END) AS 浙江省 FROM student GROUP BY sex; ``` 这将返回每个性别的浙江学生数。 5. 为了同时统计多个省份,我们可以将上述查询扩展为: ```sql SELECT sex, COUNT(CASE WHEN province = '广东省' THEN '广东省' END) AS 广东省, COUNT(CASE WHEN province = '江西省' THEN '江西省' END) AS 江西省, COUNT(CASE WHEN province = '浙江省' THEN '浙江省' END) AS 浙江省 FROM student GROUP BY sex; ``` 这将生成一个结果表,展示每个性别的江西省、广东省和浙江省的学生人数。 `CASE WHEN THEN`的关键在于,它允许我们根据条件选择性地计算值。如果满足条件,它返回一个指定的值(在这种情况下,是省份的名称),否则返回NULL。由于`COUNT()`函数忽略NULL值,所以它只计算符合条件的行。 此外,`ELSE`子句可以在`CASE WHEN THEN`结构中用于提供一个默认值,当所有条件都不满足时返回该值。例如,如果想要包含未在`WHEN`子句中明确列出的其他省份,可以这样写: ```sql SELECT sex, COUNT(CASE WHEN province = '广东省' THEN '广东省' ELSE NULL END) AS 广东省, COUNT(CASE WHEN province = '江西省' THEN '江西省' ELSE NULL END) AS 江西省, COUNT(CASE WHEN province = '浙江省' THEN '浙江省' ELSE NULL END) AS 浙江省 FROM student GROUP BY sex; ``` 这样,即使有其他省份的数据,也不会被遗漏。 总结来说,`CASE WHEN THEN`在SQL集合函数中的使用是一种强大的工具,可以帮助我们根据条件进行复杂的计数和分类,特别是在处理大量数据和多个条件时。通过灵活运用`CASE WHEN THEN`,可以构建出满足特定需求的复杂SQL查询,有效地处理数据分析和报表生成任务。
- 粉丝: 3
- 资源: 962
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论10