SQLite中奇怪的“滥用聚合:max()”错误

时间:2018-04-29 23:11:07

标签: select sqlite where

我的SQLite表结构非常简单:

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

我想只选择val字段值等于字符串“test_id”的最大ID:

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

请注意,我使用WHERE中的“ test_id ”字符串和 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中,原始SELECT (1)没有错误。修正后的版本效果很好。 我做错了什么?是不允许在WHERE中使用相同的文本,在SQLite中使用列名?

2 个答案:

答案 0 :(得分:0)

您已回答了自己的问题

  

如果我将max(id)AS test_id更改为max(id)AS test_id2或WHERE val =" test_id" to 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():是使用汇总函数的正常结果(AVGCOUNTMINMAXSUM ...)在WHERE条款中

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

答案 1 :(得分:0)

在SQL中,双引号用于引用列/表名,test_id确实是列名。字符串用单引号分隔:

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

SQLite允许字符串使用双引号,以便与MySQL错误兼容,但如果有疑问,则必须选择标准解释。