mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

需求:

mysql 查询后根据值的不同进行判断与修改

语法结构:

SQL中的条件判断语句(case when zhen)用法

SELECT A.品号,属性,

       CASE

           WHEN A.属性 = 'S' THEN

               B.价格

           WHEN A.属性 = 'P' THEN

               C.价格

       END   价格

FROM A

    LEFT JOIN B

        ON B.品号 = A.品号

    LEFT JOIN dbo.C

        ON C.品号 = A.品号;

 

 

案例:

结果:     

SQL语句:

--测试数据
if not object_id(N'A') is null
    drop table A
Go
Create table A([品号] int,[属性] nvarchar(21))
Insert A
select 1001,N'S' union all
select 1002,N'P'
GO
if not object_id(N'B') is null
    drop table B
Go
Create table B([品号] int,[价格] int)
Insert B
select 1001,8
GO
if not object_id(N'C') is null
    drop table C
Go
Create table C([品号] int,[价格] int)
Insert C
select 1002,5
Go
--测试数据结束
SELECT A.品号,
       属性,
       CASE
           WHEN A.属性 = 'S' THEN
               B.价格
           WHEN A.属性 = 'P' THEN
               C.价格
       END 价格
FROM A
    LEFT JOIN B
        ON B.品号 = A.品号
    LEFT JOIN dbo.C
        ON C.品号 = A.品号;

 

 

 

 

语法详解:

case具有两种格式。简单case函数和case搜索函数。这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

--简单case函数
case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end


--case搜索函数
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end

 

--比如说,下面这段sql,你永远无法得到“第二类”这个结果
case when col_1 in ('a','b') then '第一类'
     when col_1 in ('a') then '第二类'
     else '其他' end  

示例:

如下users表:

上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:

如果不希望列表中出现"sex"列,语句如下:

 

将sum与case结合使用,可以实现分段统计。如果现在希望将上表中各种性别的人数进行统计,sql语句如下:

 

 

 

拓展:


拓展一:
create table 表A(品号 varchar(10),属性 varchar(10))

insert into 表A(品号,属性)
 select '1001','S' union all
 select '1002','P'

create table 表B(品号 varchar(10),价格 int)

insert into 表B(品号,价格)
 select '1001',8

create table 表C(品号 varchar(10),价格 int)

insert into 表C(品号,价格)
 select '1002',5


select a.品号,
       a.属性,
       d.价格
 from 表A a
 inner join (select 品号,价格 from 表B
             union all
             select 品号,价格 from 表C) d on a.品号=d.品号

/*
品号         属性         价格
---------- ---------- -----------
1001       S          8
1002       P          5

(2 row(s) affected)
*/

 



 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL Case When 语句可以实现多条件查询的功能,比如可以根据不同条件查询结果进行分类,根据分类结果对数据进行汇总、计数或统计等操作。 Case When 语句的基本语法如下: ``` select case [when condition1 then result1] [when condition2 then result2] [when condition3 then result3] ... [else default_result] end from table_name; ``` 其,when 后的条件可以是表达式、逻辑运算符、比较运算符等,如果 condition1 结果为 true,就返回 result1,否则继续判断 condition2,以此类推。 比如,如果有这样一张用户表,其包含了用户的姓名、性别、年龄、所在城市等信息: ``` CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, gender ENUM('male', 'female') NOT NULL, age INT NOT NULL, city VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); INSERT INTO users (name, gender, age, city) VALUES ('Tom', 'male', 26, 'Beijing'), ('Lily', 'female', 23, 'Shanghai'), ('Mary', 'female', 32, 'Shenzhen'), ('Jack', 'male', 38, 'Guangzhou'), ('Lucy', 'female', 24, 'Hangzhou'), ('David', 'male', 29, 'Shanghai'), ('Emma', 'female', 27, 'Beijing'), ('Mike', 'male', 31, 'Guangzhou'), ('Ella', 'female', 28, 'Shenzhen'), ('John', 'male', 36, 'Hangzhou'); ``` 我们可以使用 Case When 语句对用户数据进行分类,比如按照性别进行分类: ``` SELECT gender, COUNT(*) AS count FROM users GROUP BY gender ORDER BY CASE WHEN gender='male' THEN 1 WHEN gender='female' THEN 2 ELSE 3 END; -- 输出结果如下: -- gender count -- male 4 -- female 6 ``` 这里用 Case When 语句对性别进行分类,count 统计每种分类的数量,同时使用 order by 指定分类的顺序。 除了精确匹配外,Case When 语句还可以使用 like 或 in 等条件表达式进行模糊匹配,比如按照年龄段进行分类: ``` SELECT CASE WHEN age < 20 THEN '少年' WHEN age BETWEEN 20 AND 30 THEN '青年' WHEN age BETWEEN 30 AND 40 THEN '年' ELSE '老年' END AS age_group, COUNT(*) AS count FROM users GROUP BY age_group; -- 输出结果如下: -- age_group count -- 青年 4 -- 年 3 -- 老年 3 ``` 这里将用户按照年龄段进行分类,count 统计每种分类的数量,同时使用 as 将分类结果命名为 age_group。 Case When 语句可以灵活地使用在各种查询场景,比如我们可以根据不同条件返回不同的文本、数或日期格式,也可以从多个字段派生出新的字段等。需要注意的是,Case When 语句也需要谨慎使用,因为过多的分支会降低查询性能,建议根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值