class11_创建新的输出字段P2

创建新的输出字段2

CASE WHEN 逻辑转换

创建更复杂的输出字段

例如:

如何根据买入数量,区分大单、中单、小单

交易数量类型
[3000, +∞) 大单
(300,3000) 中单
(0,300] 小单

使用关键字:CASE WHEN

SELECT volume,
CASE WHEN volume >= 3000 THEN '大单'
    WHEN volume > 300 AND volume < 3000 THEN '中单'
    WHEN volume <= 300 THEN '小单'
END//CASE 一定要用END来结尾
FROM t_stock_trans_dtl
WHERE opt_typ = '买入';

# 也可以这样写:
SELECT volume,
CASE WHEN volume >= 3000 THEN '大单'
    WHEN volume > 300 AND volume < 3000 THEN '中单'
    ELSE '小单'
END//CASE 一定要用END来结尾
FROM t_stock_trans_dtl
WHERE opt_typ = '买入';
CASE WHEN 语法一:
CASE WHEN 条件表达式1 THEN 结果表达式1
WHEN 条件表达式2 THEN 结果表达式2
……
WHEN 条件表达式N THEN 结果表达式N
[ELSE ELSE条件表达式]
END
#没有ELSE部分时,如果所有条件表达式都不满足,则返回NULL。
#每一个CASE WHEN都应该有ELSE分支!!!

又例如:

对于买入的交易,交易数量为正数,而卖出的交易,交易数量为负数。这就导致交易金额(交易价格*交易数量)的返回值有正有负。如何根据交易类型做转换,交易金额全部返回正数?

交易类型返回交易金额
买入 交易价格*交易数量
卖出 0-交易价格*交易数量
# 语法一
SELECT opt_typ,opt_tm,volume,
CASE WHEN opt_typ = '买入' THEN price*volume    
    WHEN opt_typ = '卖出' THEN 0 - price*volume
    ELSE '其他'
END as '交易总额'
FROM t_stock_trans_dtl;
# 语法二
SELECT opt_typ,opt_tm,volume,
CASE opt_typ
WHEN  '买入' THEN price*volume    
    WHEN  '卖出' THEN 0 - price*volume
    ELSE '其他'
END as '交易总额'
FROM t_stock_trans_dtl;
CASE WHEN 语法二:
CASE 条件表达式
WHEN 匹配表达式1 THEN 结果表达式1
WHEN 匹配表达式2 THEN 结果表达式2
……
WHEN 匹配表达式N THEN 结果表达式N
[ELSE ELSE表达式]
END
#适用于条件表达式的结果,是一个可穷举的列表,结果是一个确定的值
#但不适用于条件表达式的结果是一个范围的情况

【注意:】

  • CASE WHEN:满足当前条件后,只执行当前的THEN便结束了

  • 两种CASE WHEN的语法均可嵌套操作,但不推荐

  • 建议最多嵌套两层并使用括号格式化SQL语句

# 用查询结果创建临时表:
CREATE TEMPORARY TABLE 临时表名 AS
(
   SELECT *  FROM 旧的表名
);

 

posted @ 2020-04-29 10:44  云川望雨  阅读(112)  评论(0编辑  收藏  举报