gpt4 book ai didi

sql - Sqlite3中UNION的SUM()违反直觉的行为

转载 作者:行者123 更新时间:2023-12-03 18:41:38 24 4
gpt4 key购买 nike

我在sqlite3终端(版本3.29.0)中运行了此代码,结果有些奇怪:

sqlite> select sum((select 4 union all select 2 ));
4
sqlite> select sum((select 4 union select 2 ));
2


我知道为什么并集会反转表,但是为什么 sum选择第一个元素?

同时,此代码按预期工作:

sqlite> select sum(x) from (select 4 as x union all select 2 as x);
6


这是预期的行为,还是sqlite中的错误?如果是有意的,其背后的逻辑(和语义)是什么?

最佳答案

这是预期的行为。

the documentation(添加重点)


括号中的SELECT语句是一个子查询。所有类型的SELECT语句,包括聚合和复合SELECT查询(带有UNION或EXCEPT之类的关键字的查询)都可以作为标量子查询使用。子查询表达式的值是附带的SELECT语句的结果的第一行。如果附带的SELECT语句不返回任何行,则子查询表达式的值为NULL。


UNION示例刚好以UNION ALL顺序结束返回行。但是,如果没有ORDER BY,则任何人都不能保证使用特定顺序。

关于sql - Sqlite3中UNION的SUM()违反直觉的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293841/

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