SQLite 中的奇怪"misuse of aggregate: max()"错误



我的sqlite表具有非常简单的结构:

CREATE TABLE `test` ( `id` INTEGER, `val` TEXT )

我想仅选择最大ID,其中 val字段值等于字符串" test_id":

SELECT max(id) AS test_id FROM test WHERE val = "test_id"  // (1)

请注意,我使用" test_id " WHERE中的字符串和 test_id 作为自定义列名。我有错误:

misuse of aggregate: max(): SELECT max(id) AS test_id FROM test WHERE val = "test_id"

如果我将max(id) AS test_id更改为max(id) AS test_id2WHERE val = "test_id"WHERE val = "test_id_something"-所有作品。

在MySQL中,我没有原始选择(1(没有错误。校正版本效果很好。我做错了什么?是否不允许在WHERE中使用相同的文本和SQLite中的列名?

在SQL中,双引号用于参考列/表名称,而test_id确实是列名称。字符串用单引号界定:

SELECT max(id) AS test_id FROM test WHERE val = 'test_id'

sqlite允许字符串的双引号,以便与mySQL兼容,但是如果疑问,它必须选择标准解释。

您已经回答了自己的问题

如果我将max(id(作为test_id将最大(id(更改为test_id2或where val =" test_id" where val =" test_id_something" - 全部工作。

WHERE val = "test_id"参考max(id) AS test_id。您需要使用不同的名称。尝试这个

SELECT max(id) AS max_id FROM test WHERE val = "some_value"

misuse of aggregate: max():是使用WHERE句子中使用聚合函数(AVGCOUNTMINMAX,CC_15 ...(的正常结果

http://sqlfiddle.com/#!7/b28b3/11