我有以下问题:
假设我有一个表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()从不抛出整数溢出。