SQLite GROUP_BY不维护数据顺序

时间:2013-08-29 19:43:12

标签: database sqlite

如果我在数据库中有这样的名字

A
C
D
B

如果我使用group by关键字,为什么sqlite会提供这样的数据

A
B
C
D

我的意思是为什么它会按顺序返回数据?我不需要保持顺序。有没有办法使用group by

维护原始格式

2 个答案:

答案 0 :(得分:3)

扩展TokenMacGuy的答案:

真正的数据库可以有数百个表,每个表有数千行,每行有可变的行数。数据库软件(MySQL,SQL Server等)管理每个项目存储在内存中的位置和方式。假设有一个表,其行存储在硬盘驱动器的三个不同位置。当您在该表上执行SELECT语句,而您没有ORDER BY时,数据库软件会抓取相应的行并将它们推送到输出中。

SQLite不同 - 文件通常较小,通常是本地的。当您在SQLite中对表执行SELECT语句时,该信息可能存储在同一位置。引用sqlite language specification, “如果返回多行的SELECT语句没有ORDER BY子句,则返回行的顺序是未定义的。”请注意,语言规范保证行不会按顺序排列。

长话短说, GROUP BY仅更改哪些行显示返回这些行的顺序。尝试创建多个表,然后插入他们以不同的顺序,在不同的时间,然后再次运行你的SELECT。这次可能不会有序。

答案 1 :(得分:2)

数据库中的行不是 任何特定顺序,并且不会以任何特定顺序返回。

即使您在查询中提供order by子句,也是如此。