SQLite Group By结果顺序行为更改自3.28.0起

金斯利

我已经注意到,使用“ GROUP BY”处理SQLite更高版本的结果的顺序存在问题。我第一次注意到Android 11时使用SQLite 3.28.0的情况。我现在将其固定为SQLite本身的行为更改。问题是结果的顺序因版本而异。我不确定这是错误,预期的行为还是我自己的错误(尽管该错误在较旧的SQLite版本中已经可以使用8年了)。

表格示例:

id|year|command |code
1 |2005|TV      |A
2 |2005|TV-CD   |B
3 |2005|CD      |B
4 |2010|TV      |B
5 |2015|TV      |C

如果我运行以下命令

SELECT * FROM myTable  GROUP BY command ORDER BY _id

在SQLite 3.22(Android 10)或3.23.1中,我得到:

2|2005|TV-CD|B
3|2005|CD   |B
5|2015|TV   |C

我要的是...

如果我在SQLite 3.28(Android 11)或更高版本中运行相同的命令,则会得到

1|2005|TV   |A
2|2005|TV-CD|B
3|2005|CD   |B

如果您想自己尝试一下,这是表格的快速示例

CREATE TABLE 'myTable' ('_id' integer PRIMARY KEY  ,'year' NUMERIC ,'command' TEXT, 'code' TEXT);
INSERT INTO myTable VALUES ("1","2005","TV","A");
INSERT INTO myTable VALUES ("2","2005","TV-CD","B");
INSERT INTO myTable VALUES ("3","2005","CD","B");
INSERT INTO myTable VALUES ("4","2010","TV","B");
INSERT INTO myTable VALUES ("5","2015","TV","C");
SELECT * FROM myTable  GROUP BY command ORDER BY _id

https://www.jdoodle.com/execute-sql-online/对于测试非常有用,因为它允许您即时更改SQLite版本。

去世

正如我在评论中已经提到的,查询的结果如下:

SELECT * FROM myTable  GROUP BY command

是不可预测的,因为GROUP BY仅应用于聚合,例如:

SELECT command, MAX(year) AS max_year 
FROM myTable  
GROUP BY command

这将返回year每个的最大值command

因此,如果在新版本GROUP BYwith的行为SELECT * ...已更改,那么如果您不使用此类查询就不会有问题。

根据我在您的问题中所读的内容,您期望command具有max的每一的结果id

在标准sql和没有窗口功能的情况下(大多数android SQLite的大多数版本仍不支持该功能),您可以先进行汇总,然后再加入表中。

但是,SQLite具有使用的记录功能,因此您可以使用列。
这是有效的:

SELECT MAX(_id) AS _id, year, command, code
FROM myTable  
GROUP BY command
ORDER BY _id

您将得到最大的行_id每个command

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

W/SQLite: (28) 无法打开

来自分类Dev

使用GROUP BY的SQLite更新

来自分类Dev

SQLite GROUP查询

来自分类Dev

sqlite3和PHP结果为空:object(SQLite3Result)#3(0){}

来自分类Dev

将位图保存到Android API 28中的外部存储中,结果为0 B文件

来自分类Dev

SQLite代码28“打开时重命名了文件”

来自分类Dev

SQLite代码28“打开时重命名了文件”

来自分类Dev

总和最好的28个结果

来自分类Dev

Python,Django:ValueError:索引3处不支持的格式字符'('(0x28)

来自分类Dev

ValueError:sequence_6层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 3。收到的完整形状:[32、28、28]

来自分类Dev

Sqlite GROUP BY优先级

来自分类Dev

SQLAlchemy group_by SQLite与PostgreSQL

来自分类Dev

SQLite中的GROUP_CONCAT

来自分类Dev

Sqlite GROUP BY优先级

来自分类Dev

在SQLite中查找与GROUP BY结果HAVING计数> 1匹配的所有记录

来自分类Dev

在SQLite中查找与GROUP BY结果HAVING计数> 1匹配的所有记录

来自分类Dev

线程 0xc28 已退出,代码为 0

来自分类Dev

SQLITE3 GROUP BY“周年纪念日”

来自分类Dev

如何在 Python 的 SQLite3 中使用 GROUP BY 计算不为空的行?

来自分类Dev

计算字段以捕获自日期起+/- 28天

来自分类Dev

SQLite iOS,不执行INSERT。没有错误讯息。结果= SQLITE_OK = 0

来自分类Dev

SQLite iOS,不执行INSERT。没有错误讯息。结果= SQLITE_OK = 0

来自分类Dev

结果集上的SQLite JDBC总是返回null。0

来自分类Dev

结果集上的SQLite JDBC总是返回null。0

来自分类Dev

我如何在sqlite中省略结果中的数字/ 0?

来自分类Dev

GROUP BY子句以sqlite获取逗号分隔的值

来自分类Dev

SQLITE中的组联系人中的GROUP BY

来自分类Dev

在SQLite中使用SELECT ... GROUP BY ... HAVING

来自分类Dev

SQL Group By和COALESCE在sqlite上的问题

Related 相关文章

  1. 1

    W/SQLite: (28) 无法打开

  2. 2

    使用GROUP BY的SQLite更新

  3. 3

    SQLite GROUP查询

  4. 4

    sqlite3和PHP结果为空:object(SQLite3Result)#3(0){}

  5. 5

    将位图保存到Android API 28中的外部存储中,结果为0 B文件

  6. 6

    SQLite代码28“打开时重命名了文件”

  7. 7

    SQLite代码28“打开时重命名了文件”

  8. 8

    总和最好的28个结果

  9. 9

    Python,Django:ValueError:索引3处不支持的格式字符'('(0x28)

  10. 10

    ValueError:sequence_6层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 3。收到的完整形状:[32、28、28]

  11. 11

    Sqlite GROUP BY优先级

  12. 12

    SQLAlchemy group_by SQLite与PostgreSQL

  13. 13

    SQLite中的GROUP_CONCAT

  14. 14

    Sqlite GROUP BY优先级

  15. 15

    在SQLite中查找与GROUP BY结果HAVING计数> 1匹配的所有记录

  16. 16

    在SQLite中查找与GROUP BY结果HAVING计数> 1匹配的所有记录

  17. 17

    线程 0xc28 已退出,代码为 0

  18. 18

    SQLITE3 GROUP BY“周年纪念日”

  19. 19

    如何在 Python 的 SQLite3 中使用 GROUP BY 计算不为空的行?

  20. 20

    计算字段以捕获自日期起+/- 28天

  21. 21

    SQLite iOS,不执行INSERT。没有错误讯息。结果= SQLITE_OK = 0

  22. 22

    SQLite iOS,不执行INSERT。没有错误讯息。结果= SQLITE_OK = 0

  23. 23

    结果集上的SQLite JDBC总是返回null。0

  24. 24

    结果集上的SQLite JDBC总是返回null。0

  25. 25

    我如何在sqlite中省略结果中的数字/ 0?

  26. 26

    GROUP BY子句以sqlite获取逗号分隔的值

  27. 27

    SQLITE中的组联系人中的GROUP BY

  28. 28

    在SQLite中使用SELECT ... GROUP BY ... HAVING

  29. 29

    SQL Group By和COALESCE在sqlite上的问题

热门标签

归档