SQLite 在处理聚合时的行为与许多其他 RDBMS 不同。考虑下表和值:
create table foo (a int, b int);
insert into foo (a, b) values (1, 10);
insert into foo (a, b) values (2, 11);
insert into foo (a, b) values (3, 12);
如果我这样查询:
select a, group_concat(b) from foo;
通常,我希望收到一个错误,因为我没有在 GROUP BY 子句中包含列“a”。下面是 SQL Server 产生的错误(PostgreSQL 会发出类似的东西)。
Column 'foo.a' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
另一方面,SQLite 只是配合它并产生以下结果:
3|10,11,12
这有什么好处?它是如何选择列“a”的值的?如果我们添加另一行,它正在选择的内容似乎有一个模式,也许我们可以试探性地说它正在使用最近添加的行,尽管它可能只是不确定的。
sqlite> insert into foo (a, b) values (2, 13);
sqlite> select a, group_concat(b) from foo;
2|10,11,12,13
这对我来说似乎是一个错误,但我想知道我们这里的数据库专家对此有何看法。
(我在 Ubuntu 上使用 SQLite 版本 3.6.16。)