sum结合case函数以及分组的使用

本文介绍了如何在SQL查询中使用CASE函数配合SUM函数,对epidemic_return_school_persone表进行分组,统计返校和未返校人数,同时展示了如何针对多分类场景,如部门下的性别分类。通过实例演示了如何仅统计is_apply为1的结果,而忽略0的情况,适合初学者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sum结合case函数使用以及分组简单的三表查询

select f.dep_id,f.depart_name,
sum(case when f.is_apply = '1' then 1 else 0 end) as '返校人数',
sum(case when f.is_apply = '0' then 1 else 0 end) as '未返校人数'
 from (
select n.dep_id,n.depart_name,e.is_apply from epidemic_return_school_person e ,
(select u.user_id,u.dep_id,s.depart_name from sys_depart s,sys_user_depart u where s.id=u.dep_id) n where e.user_id=n.user_id 
) f GROUP BY f.dep_id,f.depart_name;

这里的sum只统计结果为1的结果,结果为0的不被统计到。
分组主要是针对一个名称下有多个分类 使用
例如性别下可分为男女。

### MySQL 中 `SUM` 函数与 `CASE WHEN` 结合使用的详解 #### 使用场景描述 在处理复杂查询需求时,经常需要根据不同条件计算特定数据的汇总值。通过将 `SUM()` 和 `CASE WHEN ... THEN ... ELSE ... END` 联合起来可以实现基于不同逻辑分支的数据聚合操作。 #### SQL语法结构展示 对于给定表中的记录可以根据某些属性来决定哪些应该被计入最终的结果集中: ```sql SELECT SUM( CASE WHEN condition_expression_1 THEN value_to_sum_for_true_case_1 WHEN condition_expression_2 THEN value_to_sum_for_true_case_2 ... ELSE default_value_or_zero END ) AS calculated_column_name, FROM table_name; ``` 这里的关键在于利用 `CASE WHEN` 来定义多个可能的情况及其对应的数值表达式,在遇到符合条件的情况下返回相应的值用于后续求和运算;如果都不匹配则采用默认情况下的设定[^1]。 #### 实际案例分析 考虑如下例子:假设有一个订单表格 `y_quote_order` 包含客户类型 (`client_type`) 及状态(`status`) 字段。现在想要分别统计两种不同类型客户的有效订单数量(即状态为已确认的状态码),可以通过下面这条语句完成此任务: ```sql SELECT SUM(CASE WHEN qo.client_type = 1 AND qo.status = 10 THEN 1 ELSE 0 END) AS typeOneCount, SUM(CASE WHEN qo.client_type = 2 AND qo.status = 10 THEN 1 ELSE 0 END) AS typeTwoCount FROM y_quote_order qo; ``` 上述命令会针对每种类型的客户端生成单独的一列计数结果,并且只会在指定条件下增加计数器。 另外一种情形是在高度等于特定值的时候赋予固定分值并做总计,比如从身高表`t_wzw`里筛选出所有身高恰好是175cm的人给予4分奖励,其余一律记作3分,最后算出总得分: ```sql SELECT SUM(CASE WHEN t_wzw.height = 175 THEN 4 ELSE 3 END) as total_score FROM t_wzw; ``` 这段代码实现了当某条记录满足特定条件时为其分配不同的权重因子再进行累积相加的操作[^2]。 综上所述,这种组合方式提供了极大的灵活性使得开发者能够轻松应对各种复杂的业务逻辑要求而无需依赖额外的应用层编程工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值