首页 > 数据库 >mysql case when then用法(转)

mysql case when then用法(转)

时间:2022-12-02 18:45:26浏览次数:52  
标签:case users mysql when sex SQL name

mysql case when then用法(转)

原文:https://www.cnblogs.com/Richardzhu/p/3571670.html

  • 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  

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

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

下面实例演示:
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:

SQL> drop table users purge;
 
drop table users purge
 
ORA-00942: 表或视图不存在
SQL> create table users(id int,name varchar2(20),sex number);
 
Table created
SQL> insert into users(id,name) values(1,'张一');
 
1 row inserted
SQL> insert into users(id,name,sex) values(2,'张二',1);
 
1 row inserted
SQL> insert into users(id,name) values(3,'张三');
 
1 row inserted
SQL> insert into users(id,name) values(4,'张四');
 
1 row inserted
SQL> insert into users(id,name,sex) values(5,'张五',2);
 
1 row inserted
SQL> insert into users(id,name,sex) values(6,'张六',1);
 
1 row inserted
SQL> insert into users(id,name,sex) values(7,'张七',2);
 
1 row inserted
SQL> insert into users(id,name,sex) values(8,'张八',1);
 
1 row inserted
SQL> commit;
 
Commit complete
SQL> select * from users;
 
                                     ID NAME                        SEX
--------------------------------------- -------------------- ----------
                                      1 张一                 
                                      2 张二                          1
                                      3 张三                 
                                      4 张四                 
                                      5 张五                          2
                                      6 张六                          1
                                      7 张七                          2
                                      8 张八                          1
 
8 rows selected
  • 1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:
SQL> select u.id,u.name,u.sex,
  2    (case u.sex
  3      when 1 then '男'
  4      when 2 then '女'
  5      else '空的'
  6      end
  7     )性别
  8  from users u;
 
                                     ID NAME                        SEX 性别
--------------------------------------- -------------------- ---------- ------
                                      1 张一                            空的
                                      2 张二                          1 男
                                      3 张三                            空的
                                      4 张四                            空的
                                      5 张五                          2 女
                                      6 张六                          1 男
                                      7 张七                          2 女
                                      8 张八                          1 男
 
8 rows selected

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

SQL> select u.id,u.name,
  2    (case u.sex
  3      when 1 then '男'
  4      when 2 then '女'
  5      else '空的'
  6      end
  7     )性别
  8  from users u;
 
                                     ID NAME                 性别
--------------------------------------- -------------------- ------
                                      1 张一                 空的
                                      2 张二                 男
                                      3 张三                 空的
                                      4 张四                 空的
                                      5 张五                 女
                                      6 张六                 男
                                      7 张七                 女
                                      8 张八                 男
 
8 rows selected

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

SQL> select
  2    sum(case u.sex when 1 then 1 else 0 end)男性,
  3    sum(case u.sex when 2 then 1 else 0 end)女性,
  4    sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空
  5  from users u;
 
        男性         女性       性别为空
---------- ---------- ----------
         3          2          0

--------------------------------------------------------------------------------
SQL> select
  2    count(case when u.sex=1 then 1 end)男性,
  3    count(case when u.sex=2 then 1 end)女,
  4    count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空
  5  from users u;
 
        男性          女       性别为空
---------- ---------- ----------
         3          2          0

标签:case,users,mysql,when,sex,SQL,name
From: https://www.cnblogs.com/pine007/p/16945349.html

相关文章

  • Docker 使用PXC搭建MySQL集群(MySQL:5.7.24)
    关于MySQL集群,常用的有两种模式:​​Replication集群架构(主从复制)​​​和​​PXC集群架构​​PXC集群方案所有节点都是可读可写的,Replication从节点不能写入,因为主从同步......
  • Docker swarm 安装MySQL集群
    这里直接采用的是5.7.24版本的MySQL初始化dockerswarm:dockerswarminit正常会显示当前服务器作为leader,然后打印出来加入此dockerswarm的token。我这里执行过了,使用d......
  • 【MySQL】多表查询、分组求和、并对和排序、取top n
    查漏补缺MySQL的相关知识​​1.有一个用户资金流水表(如上的sql代码),找出流水金额最多的前10个用户:​​​​2.查询分组后的最大值,最小值所在的整行记录或者分组后的topn行......
  • MySQL中关于金额数据进行运算求和/整数时精度丢失/清空表数据,自增从1开始
    关于MySQL的使用总结:1.金额字段类型为String时,进行求和运算2.查询DECIMAL类型数据小数点后精度缺失丢失为0的小数3.清空表的数据,id自增从1开始的方法1.金额字段类......
  • Mysql中的explain查看执行计划
    Mysql中的explain查看执行计划1、explain是什么?查看执行计划。2、怎么使用?explain+sql语句。3、执行计划包含的信息:id,select_type,table,type,possible_ke......
  • 数据库面试题--Mysql
    MySQL1.什么是索引?2.索引是个什么样的数据结构呢?3.Hash索引和B+树索引有什么区别或者说优劣呢?4.在建立索引的时候,都有哪些需要考虑的因素呢?5.了解过哪些存储引......
  • 二进制部署MySQL8
    下载安装包:wgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz下载依赖:yum-yinstalllibaio解压安装:tar-x......
  • Python高级-mini-web框架、添加路由、MySQL功能-笔记
    此篇文章是接着上一篇文章写的​​《Python高级-WSGI、mini-web框架-笔记》​​下一篇​​《Python高级-mini-web框架、添加log日志、路由支持正则-笔记》​​1.miniweb框......
  • linux++mysql命令行操作
    linux操作:切换root>sudosu  linux mysql命令行操作root@fossx:/opt/fossx/conf#sudomysql-uroot-pmysql>showdatabase;mysql>usefossx;mysql>showtab......
  • kubernetes中Deployment和replicaset关系剖析
    kubernetes中Deployment和replicaset关系剖析 前言:本片文章主要介绍了Deployment和Replicaset之间的关系以及如何产生Pod#vimnginx-deploy.yaml  #先给出De......