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 を使用しています。)