我知道这个问题似乎有些基本但我想确保我得到正确的语法,因为这行代码会经常运行:
我想对包含在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)