SQL总和为3列

Ada*_*ick -1 sql

我知道这个问题似乎有些基本但我想确保我得到正确的语法,因为这行代码会经常运行:

我想对包含在IN子句中的id的所有行中的表"alphabet"的列A,B和C求和.

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

SELECT SUM(A + B + C) as "subtotal" FROM alphabet WHERE id IN ('1','5','378');
Run Code Online (Sandbox Code Playgroud)

bti*_*lly 10

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

SELECT SUM(A + B + C) as "subtotal" FROM alphabet WHERE id IN (1,5,378);
Run Code Online (Sandbox Code Playgroud)

这应该有效,但可能会有一个非显而易见的后果.如果任何行A不为null而其中一个为null,则该行将退出求和,因为null加上任何其他值为null,并且SUM运算符忽略空值.因此,写起来可能更安全:

SELECT SUM(A) + SUM(B) + SUM(C) as "subtotal" FROM alphabet WHERE id IN (1,5,378);
Run Code Online (Sandbox Code Playgroud)

这会遇到同样的潜在问题,但不太可能发生,因为整个列必须为空.如果您仍然担心,有各种方言特定的方法来抵御这个问题.最便携的是痛苦的冗长:

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);
Run Code Online (Sandbox Code Playgroud)