sql - 根据一列的值计算不同的总和

标签 sql sqlite

在伪代码中,这基本上是我想做的:

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/

相关文章:

sql - 如何在SQL Server 2005中删除列的IDENTITY属性

每个 GROUP BY 的 MySQL n 个结果,按计数排序

mysql - 如何根据上个月的计算更新每个月的期初余额?

Java更新SQL数据库性能

iphone - 在一般应用程序和特定应用程序中,如何验证SQLite文件是否为有效的核心数据存储?

sql - SQLite INNER JOIN 中的 "ambiguous column name"

sql - 如何单独安装localdb?

android - 无法分配 CursorWindow

python - 操作错误: no such table: books on python anywhere

java - rawQuery select 语句中的列名称不明确