在伪代码中,这基本上是我想做的:
select
if a1 >= 0 and a1 <= 2
a2 + a7 + a8 as sum
else
a2 + a8 as sum
from table_name
;
(列名等只是为了说明。)
英语:我需要对几千条记录中的每条记录的不同列求和。如果可能的话,我想用 SQL 求和。条件之间只有一两个差异,要么是缺少/添加了一个列,要么是替换,要么两者都有。这是基于应用程序的业务逻辑,而不是我选择的设计决策。
我使用的是 sqlite3 (3.6.10),它在一定程度上限制了选项。
最佳答案
在这里您可以使用一个技巧,在 SQL 中 bool 表达式的计算结果为 0 或 1:
SELECT a2 + a8 + a7 * (a1 BETWEEN 0 AND 2) AS SUM
FROM table_name
更通用(也更传统)的方法是使用 CASE 表达式:
SELECT
CASE WHEN a1 BETWEEN 0 AND 2
THEN a2 + a7 + a8
ELSE a2 + a8
END AS SUM
FROM table_name
您也可以像这样在不重复常用术语的情况下包含 CASE 表达式:
SELECT
a2 + a8 + (CASE WHEN a1 BETWEEN 0 AND 2 THEN a7 ELSE 0 END) AS SUM
FROM table_name
关于sql - 根据一列的值计算不同的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289907/