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
GROUP  BY sex  

count()函数即根据给定的范围和group by(统计方式) 而统计行数据的条数

我们一步步来理解上面语句
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() 中的 号换成任一列名呢? 如count(province) 会怎样?

4.select sex ,province, count (province)as num from student group by sex,province (查询各省男女数量)

结果跟上图一样:这说明换不换都一样。又有count (province)等价于 count(case province when ‘浙江省’ then ‘浙江省’ else province end )

但是如果我们缩小范围呢即count(case province when ‘浙江省’ then ‘浙江省’ end ) 那么请看下面

5.select sex ,province, count ( case province when ‘浙江省’ then ‘浙江省’ end )as num from student group by sex,province
这里写图片描述
即统计男女数量范围限定在浙江省 再精简一下即下面

6.select sex, count ( case province when ‘浙江省’ then ‘浙江省’ end ) as 浙江省 from student group by sex
这里写图片描述
已经接近我们的要求了,现在只要加上另几个字段就是了

7.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 group by sex
这里写图片描述
小结:当然实现有很多种方法 可以多个子查询拼接起来也不无可厚非。我这只是一种思路

补充:case when then 知识点

(1) select (case province when ‘浙江省’ then ‘浙江’ when ‘江西省’ then ‘江西’ end ) as 省份 from student
这里写图片描述
如果默认范围如果没全包含则为空 像上图的广东省为空

(2)select (case province when ‘浙江省’ then ‘浙江’ when ‘江西省’ then ‘江西’ else province end ) as 省份 from student
这里写图片描述

### SQL Server 中 CASE WHEN THEN 语句的使用教程 #### 简单 CASE 表达式的应用 简单 CASE 表达式适用于当条件仅涉及单一列或表达式的比较时。这种类型的 CASE 当匹配到第一个符合条件的情况即停止并返回相应的结果。 ```sql SELECT product_id, product_name, price, CASE category_id WHEN 1 THEN 'Electronics' WHEN 2 THEN 'Clothing' ELSE 'Other' END AS Category_Name FROM products; ``` 此查询会根据 `category_id` 的值来决定产品所属类别名称[^2]。 #### 搜索 CASE 表达式的应用 搜索 CASE 更加灵活,支持复杂的布尔表达式作为判断依据。这使得可以处理更为复杂的情形,比如多字段组合条件或是范围内的数值判定。 ```sql SELECT employee_id, first_name, last_name, salary, CASE WHEN salary BETWEEN 5000 AND 9999 THEN 'Low Salary' WHEN salary >= 10000 AND salary <= 14999 THEN 'Medium Salary' ELSE 'High Salary' END AS Salary_Level FROM employees; ``` 上述例子展示了如何利用 CASE 来分类员工薪资水平[^3]。 #### 结合其他 SQL 功能的应用实例 CASE 可以与其他 SQL 特性相结合,如聚合函数、子查询等,从而实现更加高级的数据操作需求。 ```sql -- 计算不同状态下的订单数量 SELECT order_status, COUNT(*) AS total_orders, SUM(CASE WHEN payment_method = 'Credit Card' THEN 1 ELSE 0 END) AS credit_card_orders FROM orders GROUP BY order_status; ``` 这段代码不仅统计了每种状态下总的订单数,还特别计算了其中信用卡支付的数量[^4]。 SQL Server 提供了两种形式的 CASE 表达式——简单 CASE 和搜索 CASE,前者适合于简单的相等情况测试;后者则能应对更广泛的场景,包括但不限于区间检测和复合条件评估。通过合理运用这两种模式,可以在数据检索与分析方面获得极大的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值