首页 > 数据库 >【SQL进阶】CASE语句的使用

【SQL进阶】CASE语句的使用

时间:2024-05-30 09:54:52浏览次数:22  
标签:CASE 语句 进阶 北海道 when case 000 本州岛 SQL

语法格式

case [列名] when [可能值1] then [目标值1]
when [可能值2] then [目标值2]
...
else [缺省值] end

注意的点

  1. else最好写上
  2. end必须写
  3. when后面的和then后面的值类型必须相同

练习

  1. 有一张日本的都道府郡表,包含编号,都道府郡名称,以及对应的人口数。输出每个岛的总人数。
    +----+----------------+------------+
    | ID | PrefectureName | Population |
    +----+----------------+------------+
    | 1 | 北海道 | 5,800,000 |
    | 2 | 青森県 | 1,300,000 |
    | 3 | 岩手県 | 1,250,000 |
    | 4 | 宮城県 | 2,300,000 |
    | 5 | 秋田県 | 1,000,000 |
    | 6 | 山形県 | 1,100,000 |
    | 7 | 福島県 | 1,900,000 |
    | 8 | 茨城県 | 2,900,000 |
    | 9 | 栃木県 | 2,000,000 |
    | 10 | 群馬県 | 2,000,000 |
    +----+----------------+------------+

在日本,都道府县按照所属的岛屿可以分为以下几个主要岛屿群:

北海道岛(北海道)
本州岛(包括东京都、神奈川县、山梨县、长野县、富山县、石川县、福井县、岐阜县、静冈县、爱知县、三重县、滋贺县、京都府、大阪府、兵库县、奈良县、和歌山县、广岛县、冈山县、山口县等)
四国岛(包括香川县、爱媛县、德岛县、高知县)
九州岛(包括福冈县、佐贺县、长崎县、熊本县、大分县、宫崎县、鹿儿岛县)
琉球群岛(包括冲绳县等)
所以输出为:
+------------+------------+
| 岛屿 | 总人数 |
+------------+------------+
| 北海道岛 | 5,800,000 |
| 本州岛 | 14,450,000 |
+------------+------------+

答案

建表语句

CREATE TABLE JapanesePrefectures (
ID INT PRIMARY KEY,
prefectureName VARCHAR(255),
population INT
);

插表语句

INSERT INTO JapanesePrefectures (ID, prefectureName, population) VALUES
(1, '北海道', 5800000),
(2, '青森県', 1300000),
(3, '岩手県', 1250000),
(4, '宮城県', 2300000),
(5, '秋田県', 1000000),
(6, '山形県', 1100000),
(7, '福島県', 1900000),
(8, '茨城県', 2900000),
(9, '栃木県', 2000000),
(10, '群馬県', 2000000);

查询语句

select case prefectureName when '北海道' then '北海道岛'
when '青森県' then '本州岛'
when '岩手県' then '本州岛'
...
else '其他' end as island, sum(population) from JapanesePrefectures
group by island;

说明:这里要理解group by island,是我们经过case语句后处理的列值。

这个语句甚至可以这么写
select case prefectureName when '北海道' then '北海道岛'
when '青森県' then '本州岛'
when '岩手県' then '本州岛'
...
else '其他' end as island, sum(population) from JapanesePrefectures
group by case prefectureName when '北海道' then '北海道岛'
when '青森県' then '本州岛'
when '岩手県' then '本州岛'
...
else '其他' end;

我原本以为group by后面只能是字段名,其实也可以是case语句块。

标签:CASE,语句,进阶,北海道,when,case,000,本州岛,SQL
From: https://www.cnblogs.com/jin-wen-xin/p/18221751

相关文章

  • 关于mysql explain中key_len
    key_len只指示了where中用于条件过滤时被选中的索引列,是不包含orderby、groupby这一部分被选中的索引列的。索引字段:没有设置NOTNULL,则需要加1个字节。定长字段:tinyint 占 1 个字节、int 占 4个字节、bitint 占 8 个字节、date 占 3个字节、datetime 占 5 ......
  • 日常开发中注意点总结(三)对于分页查询、详情查询总到底哪些字段该回传回来,数据库的回传
    还有个问题,对于分页查询、详情查询这些接口中,到底是哪些字段应该回传给前台,其实还是依赖于前台需要对哪些字段做展示,需要使用哪些字段。一般对于resVo响应实体,都是包含哪些应该返回的字段(前端应该展示的字段),这种的再后面查询数据库的时候,直接查询该展示的字段,这是没有任何异......
  • MySQL 与 Redis 缓存一致性的实现与挑战
    缓存是提高应用性能的重要手段之一,而MySQL和Redis是两种常用的数据存储和缓存技术。在许多应用中,常常将Redis用作缓存层,以加速对数据的访问。然而,在使用MySQL和Redis组合时,保持缓存与数据库之间的一致性是一个不得不考虑的问题。一、缓存一致性的挑战MySQL和Re......
  • 分布式任务调度内的 MySQL 分页查询优化
    一、背景介绍最近在线上环境发现了一条执行较慢的分页查询,高并发执行,产生了大量的慢查询日志,CPU使用率逐步升高。通过观察它的执行时间,发现该SQL查询时快时慢,执行时间并不稳定,以至于在高并发执行场景时,数据库来不及响应,数据库服务变慢。二、分析定位2.1定位SQL执行......
  • Springboot计算机毕业设计学生实习考勤的打卡小程序【附源码】开题+论文+mysql+程序+
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着高等教育的发展,学生实习已成为培养应用型人才的重要环节。然而,在学生实习管理过程中,考勤是一个关键环节,也是确保实习质量和学生安全的基础。传统......
  • Springboot计算机毕业设计学生食代小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在当今数字化时代,随着移动互联网的普及和智能化技术的发展,学生群体的生活方式和消费习惯也在发生着深刻的变化。特别是在校园餐饮领域,学生们对于便捷......
  • Java-Mysql
    1:数据库相关概念以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊端假设在文件中存储以下的数据姓名年龄性别住址张三23男北京西三旗李四24女北京西二旗王五25男西安......
  • MySQL约束条件,非空空约束(not nullnull),主键约束PK(primary key),外键约束FK(foreign key
    ⅠMySQL约束条件【一】什么是约束条件约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败!约束条件在创建表时可以使用,也可以修改表的时候添加约束条件【二】约束条件概览null和notnull为空和不为空限制整数类型必须大......
  • 关于mysql连表操作
    1createdatabasetest2;2usetest2;3CREATETABLEstudents(4student_idINT,5student_nameVARCHAR(50)6);78CREATETABLEcourses(9course_idINT,10student_idINT,11course_nameVARCHAR(50)12);1314INSERT......
  • 成为MySQL DBA后,再看ORACLE数据库(三、参数管理)
    一、参数文件在ORACLE11g及以后的版本中,ORACLE使用spfile作为数据库的参数文件,这是一个二进制文件,不能通过手工修改。SPFILE的引入使得对于参数的修改都可以在命令行完成,不需要手工修改,这也是为了减少了人为错误的发生。而在MySQL中,需要去手工维护my.cnf参数文件,主要原因是在MyS......