gpt4 book ai didi

mysql - 添加列和对具有 NULL 值的列求和之间的 SQL 差异

转载 作者:行者123 更新时间:2023-11-28 23:17:30 24 4
gpt4 key购买 nike

当我将两列 vw 加在一起时,如果一个或两个被加数为 NULL,行的结果将给出 NULL 。这是有道理的。但是,如果我用 SUM(v) 对该列求和,即使有 NULL 也会得到一个数字结果。这是因为实际方便吗?还是有理论上的依据?

这里有一个例子来说明(MySQL 和 sqlite):

CREATE TABLE x0 (
id INTEGER
, v DOUBLE
, w DOUBLE
);

INSERT INTO x0 VALUES
(1, 1, 1)
, (2, 1, 1)
, (3, NULL, 1)
, (4, 1, NULL)
, (5, NULL, NULL)
;

-- NULL if summand is NULL
SELECT v+w
FROM x0
;
-- v+w
-- 2
-- 2
-- \N
-- \N
-- \N

-- NULL if summand is NULL
SELECT id, v+w, SUM(v+w)
FROM x0
GROUP BY id
;
-- id v+w SUM(v+w)
-- 1 2 2
-- 2 2 2
-- 3 \N \N
-- 4 \N \N
-- 5 \N \N


-- There is numeric results even if some summands are NULL
SELECT SUM(v), SUM(w)
FROM x0
;
-- SUM(v) SUM(w)
-- 3 3

最佳答案

ISO/IEC 9075:1992 Database Language SQL在第 6.5 节( ),一般规则,1) b 中说:

let TX be the single-column table that is the result of applying the <value expression> to each row of T and eliminating null values.

这就是它所说的全部内容。所以聚合函数必须忽略 NULL,但是,正式地,没有理由。

这种行为可以追溯到第一个 SQL 实现(IBM System R、Oracle V2),当时的设计者可能认为这是个好主意。后来,没有人想破坏向后兼容性。

在这方面,和其他方面一样,SQL's handling of NULL values不一致,有时不可移植。

关于mysql - 添加列和对具有 NULL 值的列求和之间的 SQL 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com