sql - SQL_Data_Manipulation
问题描述
Indicator Letter Number Value
1 Control A 119 1494
2 Test A 119 1083
3 Control A 121 834
4 Test A 121 638
5 Control B 121 319
6 Test B 121 378
我想创建一个新列,在测试和控制之间运行计算,其中字母和数字在测试和控制之间相等。因此,例如前两行将是 (1083-1494)/1083
解决方案
应该这样工作:
SELECT letter, number, (test.value - control.value) / test.value as result
FROM t as control
JOIN t as test
ON
control.letter = test.letter AND
control.number = test.number AND
control.indicator = 'Control' AND
test.indicator = 'Test'
编辑(除以零):根据您要如何处理 0 值,最通用的解决方案是CASE
表达式
SELECT
letter,
number,
CASE WHEN test.value IS NULL OR test.value = 0
THEN 'Undefined'
ELSE (test.value - control.value) / test.value
END AS result
FROM t AS control
JOIN t AS test
ON
control.letter = test.letter AND
control.number = test.number AND
control.indicator = 'Control' AND
test.indicator = 'Test'
推荐阅读
- html - 如何在角度 4 中的任何 html 元素的标题属性上设置 html 字符串?
- html - 将屏幕分成两个单独的相等部分 ionic 3
- php - 将2个数组变成1个数组
- excel-formula - 一个数字数组的总和,在 1 个单元格中用逗号分隔,仅当至少有 5 个元素时
- javascript - 一组 js 逻辑有效而另一组无效
- javascript - 如何在js文件中添加Jquery No Conflict
- html - 我们如何通过使用伪元素来实现类似列表的行为
- python - 获取字段时出现 DjangoUnicodeDecodeError
- configuration - 有没有办法使用配置中的属性来丰富日志?
- django - Display dict index or key name in django template