首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3列的SQL和

3列的SQL和
EN

Stack Overflow用户
提问于 2011-07-02 20:35:41
回答 2查看 55K关注 0票数 2

我知道这个问题似乎有点基础,但我想确保我的语法是正确的,因为这一行代码将经常运行:

对于包含在我的in子句中的所有行,我想对表“字母表”的A、B和C列进行求和。

我就是这样做的,但如果可能的话,我想确认一下:

代码语言:javascript
运行
复制
SELECT SUM(A + B + C) as "subtotal" FROM alphabet WHERE id IN ('1','5','378');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-02 20:40:33

如果id不是字符串,则不应该引用这些值。

代码语言:javascript
运行
复制
SELECT SUM(A + B + C) as "subtotal" FROM alphabet WHERE id IN (1,5,378);

这是可行的,但可能会有一个不明显的后果。如果任何行都具有A not null,而其他一行为null,则该行将退出求和,因为null加任何其他内容都为null,而SUM运算符忽略了null。因此,更安全的做法是:

代码语言:javascript
运行
复制
SELECT SUM(A) + SUM(B) + SUM(C) as "subtotal" FROM alphabet WHERE id IN (1,5,378);

这也存在同样的潜在问题,但不太可能发生,因为整个列必须为null。如果你仍然关心这个问题,有各种方言的具体方法来防御这个问题。最便携的是痛苦而冗长的:

代码语言:javascript
运行
复制
SELECT SUM(
      CASE
        WHEN A IS NULL
        THEN 0
        ELSE A
      END
      +
      CASE
        WHEN B IS NULL
        THEN 0
        ELSE B
      END
      +
      CASE
        WHEN c IS NULL
        THEN 0
        ELSE C
      END
    ) as "subtotal"
FROM alphabet
WHERE id IN (1,5,378);
票数 14
EN

Stack Overflow用户

发布于 2014-06-30 10:11:12

代码语言:javascript
运行
复制
declare 
    @a int = 0, 
    @b int = 5,
    @c int = NULL

select 
    ISNULL(@a, 0) + ISNULL(@b, 0) + ISNULL(@c, 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6559472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档