SQLite ведет себя иначе, когда имеет дело с агрегацией, чем многие другие СУБД. Рассмотрим следующую таблицу и значения:
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;
Обычно я ожидал бы получить ошибку из-за того, что я не включил столбец «a» в предложение GROUP BY. Ниже приведена ошибка, создаваемая 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
Что хорошего в этом? Как он выбрал значение для столбца «а»? Если мы добавим еще одну строку, то, похоже, будет образец в том, что она выбирает, и, возможно, мы можем предположительно сказать, что она использует последнюю добавленную строку, хотя она может быть просто неопределенной.
sqlite> insert into foo (a, b) values (2, 13);
sqlite> select a, group_concat(b) from foo;
2|10,11,12,13
Мне это кажется ошибкой, но мне интересно, что наши эксперты по базе данных скажут об этом.
(Я использую SQLite версии 3.6.16 в Ubuntu.)