确保 SQLite 中自定义聚合(窗口?)函数的排序

问题描述 投票:0回答:1

我正在研究 sqlite-hashes - 将

md5
sha256
等哈希函数添加到 SQLite。

为了创建

sha256_concat(val)
- 序列上的哈希,每个值必须保持一致的顺序。 SQLite 不保证常规聚合函数的执行顺序,即使它们在查询中具有
ORDER BY
,因此这两个示例中的结果都未定义! 🤦(参见group_concat订购问题):

SELECT sha256_concat(val) FROM tbl ORDER BY val;
SELECT sha256_concat(val) FROM (SELECT val FROM tbl ORDER BY val));

我认为我可以使用自定义窗口函数来解决它,但它也有一些限制:聚合状态不能“反转”(一旦将值添加到哈希中,就无法将其删除)。 “部分计算”值(计算临时哈希,并继续向其添加值)也更困难。

调用窗口函数的 SQL 是什么(使用

group_concat
进行演示),以便它像常规聚合函数一样被调用 - 永远不会调用
xValue
xInverse
(如 末尾所述) SQLite 文档 页),但仍然使用
OVER (ORDER BY value)
或类似的构造?

sqlite
1个回答
0
投票

SQLite 3.44

SQLite 版本 3.44 支持聚合函数(如 PostgreSQL)中的 ORDER BY 子句。

您的案例如下:

SELECT sha256_concat(val ORDER BY val) FROM tbl;

文档:https://www.sqlite.org/lang_aggfunc.html
更改日志:https://sqlite.org/releaselog/3_44_0.html

© www.soinside.com 2019 - 2024. All rights reserved.