SQLite SUM函数和字符串



我有以下问题:

假设我有一个表foo:

CREATE TABLE foo
(
mycolumn INTEGER
);
INSERT INTO foo VALUES (1);
INSERT INTO foo VALUES (2);
INSERT INTO foo VALUES ("");

SELECT SUM(mycolumn) FROM foo;的结果为:

SUM(mycolumn)
-------------
3.0

如果我将空字符串更新为NULL,结果将是3。这是可以理解的,因为聚合函数忽略NULL值。但是,我不理解上面(3.0)给出的浮点结果。

我在SQLite数据类型页面上找不到关于TEXT到REAL转换的任何信息。因此,我有以下问题:

当使用聚合函数时,是否有从TEXT到REAL存储类的自动转换?

p。我使用的是3.34.1版本的SQLite。

来自SQLite关于聚合的文档:

如果所有非null输入都是整数,sum()的结果是一个整数值。如果sum()的任何输入既不是整数也不是NULL,则sum()返回一个浮点值,该值可能是真实总和的近似值。

查看sqlite文档

(X)总和(X)

sum()和total()聚合函数返回所有非null的和组中的值。如果没有非null输入行,则sum()返回NULL,但total()返回0.0。NULL通常不是有用的结果为无行之和,但SQL标准要求它和大多数其他SQL数据库引擎都是这样实现sum()的,所以SQLite用同样的方式来做是为了兼容。非标准的Total()函数提供了一种方便的方法来解决这个问题SQL语言中的设计问题。

total()的结果总是一个浮点值。的结果如果所有非null输入都是整数,sum()是一个整数值。如果有任何sum()的输入既不是整数也不是NULL,那么sum()返回a浮点值,可能是真实和的近似值。

Sum()将抛出"整数溢出";异常,如果所有输入都是期间的任何点都会发生整数溢出的计算。Total()从不抛出整数溢出。

最新更新