SQL利用Case When Then 详细用法介绍

SQL利用Case When Then多条件判断

第一种用法

用一个SQL语句完成不同条件的分组。这是一种用法 抄别人的  合组合函数一起使用

 

有如下数据
国家(country) 性别(sex) 人口(population)
中国 1 340
中国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60

按照国家和性别进行分组,得出结果如下
国家 男 女
中国 340 260
美国 45 55
加拿大 51 49
英国 40 60

普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。
下面是一个是用Case函数来完成这个功能的例子
SELECT country,
       SUM( CASE WHEN sex = '1' THEN
                      population ELSE 0 END),  --男性人口
       SUM( CASE WHEN sex = '2' THEN
                      population ELSE 0 END)   --女性人口
FROM  Table_A
GROUP BY country;
 

这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。

  SUM( CASE WHEN sex = '1' THEN  population ELSE 0 END),

求合   取sex = "1" 的 population 的 SUM合  否则 取 0 结束

SUM 求和

CASE WHEN 条件就像where 之后一样的写法

THEN 取谁

(ELSE 否则取在这里没什么用  因为 你不会说匹配不到 A列就去匹配 B列

END 结束

第二种用法

SELECT
    id,
    NAME,
    cj,
    (        判断 cj  
        CASE
        WHEN cj < 60 THEN    返回'不及格'
            '不及格'
        WHEN cj BETWEEN 60  返回'良好'
        AND 90 THEN
            '良好'
        WHEN cj > 90 THEN  返回'优秀'
            '优秀'
        END
    ) AS 状态 返回名称是状态
FROM
    stud

 

 

 

 

<select id="updateDayTotalPointAndBalance" resultType="java.util.HashMap" parameterType="java.util.HashMap" >
    SELECT
    SUM(case  when type = 1  then total end) as dailyRechargeBalanceSum,
    SUM(case  when type = 2  then total end) as dailyConsumptionBalanceSum
    from `transaction`
    where
    card_id = 1718878536
    AND created LIKE "2018-07-13%"
</select>




Map<String,Orders> paramMap = new HashMap<>();
paramMap = transactionDao.updateDayTotalPointAndBalance(paramMap);



 

 

 

 

 

 

JAVA学习网站

http://how2j.cn?p=73013

 

 

### SQL Server 中 `CASE WHEN THEN ELSE END` 语句的用法 #### 简介 `CASE WHEN THEN ELSE END` 是一种在 SQL 查询中实现条件逻辑判断的强大工具。这种结构允许根据特定条件返回不同值,从而增强查询灵活性。 #### 语法概述 该表达式有两种主要形式:简单 CASE 和搜索 CASE。通常使用的搜索 CASE 更加灵活,适用于多种复杂场景[^3]。 #### 基本语法格式 ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` #### 实际应用案例 假设有一个名为 `Orders` 的表,其中包含订单数据以及客户满意度评分字段 `CustomerRating` (取值范围为0到5),现在希望创建一个新的列显示评价等级: ```sql SELECT OrderID, CustomerRating, CASE WHEN CustomerRating >= 4 THEN 'Very Satisfied' WHEN CustomerRating BETWEEN 3 AND 3.9 THEN 'Satisfied' WHEN CustomerRating BETWEEN 2 AND 2.9 THEN 'Neutral' WHEN CustomerRating < 2 THEN 'Dissatisfied' ELSE 'Unknown Rating' END AS SatisfactionLevel FROM Orders; ``` 此查询会依据客户的评分给出相应的满意程度描述,并将其作为新列 `SatisfactionLevel` 显示出来。 #### 处理 NULL 值的情况 当处理可能含有NULL的数据时,可以利用 IS NULL 或者 COALESCE 函数来进行适当转换: ```sql SELECT EmployeeName, CommissionRate, CASE WHEN CommissionRate IS NOT NULL AND CommissionRate > 0 THEN 'Eligible for Bonus' ELSE 'Not Eligible or No Data Available' END AS BonusStatus FROM Employees; ``` 这段代码检查员工是否有资格获得奖金,如果佣金率为空,则认为没有可用的信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值