SQL中case then的用法

  当我们需要从数据源上直接判断数据显示代表的含义的时候 ,就可以在SQL语句中使用CASE THEN这个函数了。
  其中case then有两种格式:

1.第一种格式:
case 列名
when 条件值1 then 选项1
when 条件值2 then 选项2.......
else 默认值 end
1.第二种格式:
case
when 列名=条件值1 then 选项1
when 列名=条件值2 then 选项2.......
else 默认值 end

话不多说,直接上案例:
案例1:题目来源于力扣SQL练习题

Stocks 表:
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| stock_name    | varchar |
| operation     | enum    |
| operation_day | int     |
| price         | int     |
+---------------+---------+
(stock_name, day) 是这张表的主键
operation 列使用的是一种枚举类型,包括:('Sell','Buy')
此表的每一行代表了名为 stock_name 的某支股票在 operation_day 这一天的操作价格。
保证股票的每次'Sell'操作前,都有相应的'Buy'操作。

编写一个SQL查询来报告每支股票的资本损益。
股票的资本损益是一次或多次买卖股票后的全部收益或损失。
以任意顺序返回结果即可。
SQL查询结果的格式如下例所示:

Stocks 表:
+---------------+-----------+---------------+--------+
| stock_name    | operation | operation_day | price  |
+---------------+-----------+---------------+--------+
| Leetcode      | Buy       | 1             | 1000   |
| Corona Masks  | Buy       | 2             | 10     |
| Leetcode      | Sell      | 5             | 9000   |
| Handbags      | Buy       | 17            | 30000  |
| Corona Masks  | Sell      | 3             | 1010   |
| Corona Masks  | Buy       | 4             | 1000   |
| Corona Masks  | Sell      | 5             | 500    |
| Corona Masks  | Buy       | 6             | 1000   |
| Handbags      | Sell      | 29            | 7000   |
| Corona Masks  | Sell      | 10            | 10000  |
+---------------+-----------+---------------+--------+
Result 表:
+---------------+-------------------+
| stock_name    | capital_gain_loss |
+---------------+-------------------+
| Corona Masks  | 9500              |
| Leetcode      | 8000              |
| Handbags      | -23000            |
+---------------+-------------------+
Leetcode 股票在第一天以1000美元的价格买入,在第五天以9000美元的价格卖出。资本收益=9000-1000=8000美元。
Handbags 股票在第17天以30000美元的价格买入,在第29天以7000美元的价格卖出。资本损失=7000-30000=-23000美元。
Corona Masks 股票在第1天以10美元的价格买入,在第3天以1010美元的价格卖出。
在第4天以1000美元的价格再次购买,在第5天以500美元的价格出售。
最后,它在第6天以1000美元的价格被买走,在第10天以10000美元的价格被卖掉。
资本损益是每次(’Buy'->'Sell')操作资本收益或损失的和=(1010-10)+(500-1000)+(10000-1000)=1000-500+9000=9500美元。

解题:

  1. 使用case then的第一种格式:
select stock_name,
sum(case operation when "Buy" then -price else price end) as capital_gain_loss
from Stocks
group by stock_name;
  1. 使用case then的第二种格式:
select stock_name,
sum(case when operation = "Buy" then -price else price end) as capital_gain_loss
from Stocks
group by stock_name;

【SQL中case then的用法】相关推荐

  1. Case When语句详解SQL中Case When的用法

    SQL中case when的用法 case when类似于编程语言中的if else判断.switch case语句.该语句执行时先对条件进行判断,然后根据判断结果做出相应的操作. Case具有两种格 ...

  2. 关于sql中case when的用法

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  3. sqlserver中能用when_【SQL】SQL中Case When的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASEsexWHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END -- ...

  4. SQL中case when then用法

    大概用法 --简单case函数 case sexwhen '1' then '男'when '2' then '女'else '其他' end --case搜索函数 case when sex = ' ...

  5. sql server中case when的用法

    CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' END 注:sql server中case when的用法 - 哦呵呵G - 博客园 --同样的 ...

  6. sql中日期函数的用法

    sql中日期函数的用法   <script src="http://blog.csdn.net/count.aspx?ID=1920773&Type=Rank" ty ...

  7. SQL中decode函数的用法

    SQL中decode函数的用法 2008-07-30 17:11:14 本文已公布到博客频道职场·创业分类 DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司 ...

  8. sqlserver中case when then用法

     sqlserver中case when then用法 (2014-04-14 17:11:06) 标签: it 分类: 数据库-SQLServer sql语句判断方法之一  Case具有两种格式 ...

  9. SQL中object_id函数的用法

    SQL中object_id函数的用法 收藏  int object_id('objectname'); 此方法返回数据库对象标识号. 其中,参数objectname 表示要使用的对象,其数据类型为nc ...

最新文章

  1. 计算机一级ps2019,2019年计算机一级考试PS基础学习点子:PS菜单中英文对照表.docx...
  2. 再不参与就晚了!!2020年结束前最后一波内测福利!人人有份!
  3. 前端进阶(一)webpack 概述
  4. 元宇宙加速近眼显示产业化
  5. STL中基本容器有: string、vector、list、deque、set、map
  6. 《数据科学:R语言实现》——2.5 使用Excel文件
  7. C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\文件不断增长,如何处理?...
  8. maven命令行创建project
  9. 深入理解Windows消息循环
  10. VSCode中Markdown目录显示异常
  11. 华为手机显示解析服务器返回错误,ajax服务器返回错误
  12. 8.Springcloud的Feign嵌入Ribbon实现接口式调用(改变restTemplate和Ribbon的调用方式)...
  13. opencv如何读取仪表中的指针刻度
  14. 拓端tecdat:R语言用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化
  15. 任正非谈鸿蒙系统研究,任正非谈鸿蒙系统 有优势 有信心打造生态
  16. 联想y50更换固态硬盘_联想y50怎么加固态硬盘而不换原来的机器硬盘?
  17. 显示upnp服务器 sonos,蒲公英的上层设备如何开启UPnP及其优点
  18. java电信计费项目_基于jsp的电信计费-JavaEE实现电信计费 - java项目源码
  19. 10款热门的企业报表工具软件,该如何选择?
  20. 【已修复】Error: ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`

热门文章

  1. 中国麻布市场现状研究分析与发展前景预测报告(2022)
  2. 使用小企鹅五笔单字输入模式
  3. 分手后请记得10句话
  4. ubuntu20.04 安装imagemagick遇到问题
  5. golang go语言 反向 websocket 代理演示代码
  6. IT行业,唯一不变的原则—“变”!
  7. 一文搞定c++多线程
  8. 1007 of dp
  9. uni-app 微信同声传译,实现AI语音功能(语音转文字,文字转语音,英汉互译
  10. 怎么找到自己热爱的事业?