CASE语句回顾:
· case语句格式一
CASE input_expression
WHEN expression1 THEN result_expression1
WHEN expression2 THEN result_expression2
[...n]
ELSE result_expression
END
CASE后面有表达式时,将CASE后的表达式的值与各WHEN子句的表达式值比较,如果相等,则执行THEN后面的表达式或语句,然后跳出CASE语句;否则,返回ELSE后面的表达式。
· case语句格式二
CASE
WHEN expression1 THEN result_expression1
WHEN expression2 THEN result_expression2
[...n]
ELSE result_expression
END
CASE后面没有表达式时,多个WHEN子句中的表达式依次执行,如果表达式结果为真,则执行相应THEN关键字后面的表达式或语句,执行完毕之后跳出CASE语句。如果所有WHEN语句都为FALSE,则执行ELSE子句中的语句。
小tips:在交换数据和列转行时可以考虑使用case语句
代码实例
SELECT stock_name,
SUM(
CASE operation
WHEN 'sell' THEN price
ELSE -price
END
) AS capital_gain_loss
FROM Stocks
GROUP BY stock_name
select
stock_name,
sum(
case
when operation = 'Buy' then -price
when operation = 'Sell' then price
end
) as capital_gain_loss
from stocks
group by stock_name
(为了让你们更好的理解,所以一段SQL写了两种不同的表达方式)
这段SQL 查询计算每个股票(stock_name)的总资本收益/损失(capital_gain_loss)。对于每个股票,它会将所有的卖出(operation='sell')操作的价格(price)相加,并将所有的买入(operation='buy')操作的价格取相反数后相加。最终的结果以股票名称(stock_name)进行分组。