SQL数据分析之流程控制语句【if,case...when详解】

2023-05-16

文章目录

    • 零、写在前面
    • 一、if单条件判断语句
    • 二、case...when多条件判断
      • 1、单条件(if...else效果)
      • 2、多条件(if...else if...else效果)
      • 3、常量用法(switch...case效果)
    • 三、ifnull填充空值

零、写在前面

本文所有代码均是在SQL ZOO平台进行,数据也该平台下的world表,所有代码均已通过测试。
sql zoo

一、if单条件判断语句

1、语法结构:if(判断条件, 成立值, 不成立值)

select if(1=1,'Yes','No');

2、判断亚洲和非洲中国土面积大于200万的国家是否为人口大国(人口大于2亿)

select continent,name,if(population>200000000,'人口大国','小国') 人口规模 
from world
where continent in ('Asia','Africa') and area>2000000
order by continent

执行结果:
1.2.1
3、查询国土面积大于100万的亚洲国家中的总体经济水平(大于1万亿为高经济体)

select name,gdp,if(gdp>1000000000000,'高经济体','低经济体') as 总体经济
from world
where continent='Asia' and area>1000000

1.3.1

二、case…when多条件判断

1、单条件(if…else效果)

将上述if修改成case…when:

#判断亚洲和非洲中国土面积大于200万的国家是否为人口大国(人口大于2亿)
select continent,name,
CASE
WHEN population>200000000 THEN '人口大国'
ELSE '小国' 
END AS 人口规模 
from world
where continent in ('Asia','Africa') and area>2000000
order by continent

#查询国土面积大于100万的亚洲国家中的总体经济水平(大于1万亿为高经济体)
select name,gdp,
CASE
when gdp>1000000000000 then '高经济体'
else '低经济体'
END as 总体经济
from world
where continent='Asia' and area>1000000

2、多条件(if…else if…else效果)

从gdp粗略判断国土面积大于50万,人口大于2000万的亚洲和欧洲国家的状态:

select continent,name,population,gdp,
CASE
WHEN gdp>=3000000000000 THEN '一等大国'
WHEN gdp>=2000000000000 and gdp<=3000000000000 THEN '二等大国'
WHEN gdp>=200000000000 and gdp<=1000000000000 THEN '三等大国' 
ELSE '发展中大国'
END AS 国家状态 
from world
where continent in ('Asia','Europe') and area>500000 and population>20000000
order by continent

2.2.1

3、常量用法(switch…case效果)

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2

else 要显示的值n或语句n;

例如:把人口数大于5000万国家的大洲名翻译成对应的中文

select name,population,
CASE continent
WHEN 'Asia' THEN '亚洲'
WHEN 'Afica' THEN '非洲'
WHEN 'South America' THEN '南美洲'
WHEN 'North America' THEN '北美洲'
WHEN 'Europe' THEN '欧洲'
ELSE '其他大洲'
END AS 所属大洲
from world
where population>=50000000

2.3.1

三、ifnull填充空值

Ifunull(字段名,“值1”)如果说这列的内容为null,则用’'来填充。如果不是null的话,则显示原有值。

select id, ifnull('score','缺考') as 分数;

若分数为null,则表示该学生缺考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL数据分析之流程控制语句【if,case...when详解】 的相关文章

  • 根本原因 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    我有这个小代码用于将我的 jsp 连接到我的 mysql 数据库 String driver com mysql jdbc Driver Class forName driver String url jdbc mysql localhos
  • 使用简单的 UPDATE 查询“不支持 DML 操作”

    我收到错误Not supported for DML operations当我使用以下 HQL 时 Query UPDATE WorkstationEntity w SET w lastActivity timestamp WHERE w
  • Python Peeweeexecute_sql() 示例

    我使用 Peewee 模块作为我的项目的 ORM 我看了整个文档 没有明确的 有关如何处理 db execute sql 结果的示例 我跟踪代码 只能发现db execute sql 返回游标 有谁知道如何处理光标 例如迭代它并获取 返回复
  • 使用 MOVE 确定 DB RESTORE 的 SQL 数据路径

    我正在尝试编写一个自动恢复数据库备份的脚本 我知道我可以使用以下 RESTORE 命令 RESTORE DATABASE DBRestoredName FROM DISK N C path to backup bak WITH FILE 1
  • 一种父子关系级联软删除的方法

    我有一个简单的架构 其中使用软删除 这就是它的设计方式并且无法更改 有两个表参与该架构 Company id is deleted and Employee id company id is deleted where company id
  • 根据另一个表中的值查找总计数

    在Mysql中 我的表中有具有重复值的城市 表城市 Name New York USA New York USA Chicago USA Chicago USA Chicago USA Paris France Nice France Mi
  • SQL Server在查询执行后不释放内存

    我想我在这里有一个很多人可能遇到过的基本问题 当我在 SQL Server 中运行查询时 它将在内存中加载查询执行所需的所有数据 例如 如果存在联接 那么它将从这两个表加载必要的数据 但是当查询完成执行内存时SQL Server 消耗的数据
  • INNER JOIN 与 INNER JOIN (SELECT . FROM)

    同一查询的这两个版本之间的性能有什么区别吗 Version 1 SELECT p Name s OrderQty FROM Product p INNER JOIN SalesOrderDetail s on p ProductID s P
  • 从 SQL Server 中的字符串中提取子字符串

    我需要从字符串中提取子字符串的一部分 如下所示 YY 12 Yellow ABC WSA Thisone A SS 4MON DHHE A A 我需要按如下方式提取字符串 Yellow Thisone DHHE 你可以使用这样的东西 dec
  • 针对树结构优化 SQL

    如何从数据库中获取具有最佳性能的树形结构数据 例如 假设数据库中有一个文件夹层次结构 文件夹数据库行所在的位置ID Name and ParentID列 您会使用特殊的算法一次获取所有数据 最大限度地减少数据库调用量并在代码中处理它吗 或者
  • oracle 计算两个字符串中连续匹配的单词

    我想要一个返回两个字符串中单词的顺序匹配数的查询 例子 Table Id column1 column2 result 1 foo bar live foo bar 2 2 foo live tele foo tele 1 3 bar fo
  • 如何在JdbcTemplate中执行多批量删除?

    我想一次删除多个数据库条目 仅当 3 个字段匹配 此处 姓名 电子邮件 年龄 时 才应删除每个条目 如果我只想删除单个属性 我会选择 String sql DELETE FROM persons WHERE email IN JdbcTem
  • SQL 性能除外

    我尝试使用类似于以下查询的查询来查找两个表之间的差异 DEV 数据库与 TEST 数据库中的同一个表 每个表有约 30K 行和约 5 列 select field1 field2 field3 field4 field5 from dev
  • 如何使用 SQLalchemy 连接三个表并将所有列保留在其中一个表中?

    所以 我有三张表 类定义 engine create engine sqlite test db echo False SQLSession sessionmaker bind engine Base declarative base cl
  • 两种 SQL 连接符号有什么区别?

    SQL 1 select from t1 join t2 on t1 f1 t2 f2 SQL 2 select from t1 t2 where t1 f1 t2 f2 他们返回的结果是相同的 它们之间有什么区别吗 例如 DBMS 如何运
  • Windows 批处理文件中的 SQL 语句

    有没有办法让Windows批处理文件直接输入SQL语句而不需要调用脚本 我希望批处理文件登录SQL 然后直接输入语句 EDIT 我正在使用 Oracle v10g 对于单个命令 您可以使用以下技巧 echo select from dual
  • SQL 连接中的多个条件

    如何指定多个条件SQL加入 我知道A key B key除此之外是强制性的 以下对于指定多个条件是否正确SQL ON A key B key and or cond1 and or cond2 etc OR ON A key B key w
  • 什么时候空值在列中“安全”?

    设计数据库时是否存在允许列为空与 3nf 规范化的一般经验法则 我有一个表 其中的列主要由空值 85 组成 但表大小不超过 10K 记录 不是很大 它主要用于日志记录和记录保存 因此大多数事务将是插入和选择 而不是更新 我试图同时考虑性能和
  • SQL 查询:按 ntext 字段分组

    我有以下查询 它基本上检索销量最高的 5 本书 select top 5 count id book orddetails books sold bk from orderdetails orddetails ord inner join
  • 似乎找不到循环 PL/SQL 数组的方法?

    我正在尝试这样做 arrCauses APEX UTIL STRING TO TABLE P1 CAUSE FOR c IN 1 arrCauses count LOOP INSERT INTO DT EVENT CAUSE EVENT I

随机推荐