我在 Android 4.4.2 版本设备中遇到了以下 Sqlite 查询的奇怪问题。提前致谢
表结构如下
CREATE TABLE responsemaster (
id INTEGER PRIMARY KEY AUTOINCREMENT,
formid integer,
proposerid text,
fieldid integer,
response text,
remarks text,
listId integer,
isMarked integer
)
给出错误的查询是
SELECT id as id, formid as formid, proposerid as proposerid, MIN(fieldid) fieldid, response as response, remarks as remarks, listId as listId, isMarked as isMarked
FROM responsemaster
WHERE formid = 40066 AND proposerid = '7ca6533a-c5f0-43e2-9980-83f9ae2c7370201802230113550000'
GROUP BY fieldid
我遇到的异常如下
android.database.sqlite.SQLiteException: aggregate functions are not allowed in the GROUP BY clause (code 1):,
while compiling: SELECT id as id, formid as formid, proposerid as proposerid, **MIN(CAST(fieldid AS INTEGER)) AS fieldid**, response as response, remarks as remarks, listId as listId, isMarked as isMarked FROM responsemaster WHERE formid = 40066 AND proposerid = '7ca6533a-c5f0-43e2-9980-83f9ae2c7370201802230113550000' GROUP BY fieldid
上述查询将在 SQLite 浏览器和高于 Android 4.4.2 版本的设备中成功执行。请任何人帮助我如何修复该错误?
尝试这个查询,它可能会取代聚合函数
SELECT id as id, formid as formid, proposerid as proposerid, fieldid as
fieldid, response as response, remarks as remarks, listId as listId,
isMarked as isMarked FROM responsemaster WHERE formid = 40066 AND proposerid = '7ca6533a-c5f0-43e2-9980-83f9ae2c7370201802230113550000'
GROUP BY fieldid HAVING fieldid = MIN(fieldid)
在 AGGREGATE 函数中使用 HAVING 子句而不是 WHERE :) 就能解决了