这是一个从表中选择行的查询。该表是可能有许多行与特定(WritingSystem,InterpretationId)配对。
select Form,WritingSystem,_id from TextForms where InterpretationId=?;
我希望结果集为每个WritingSystem包含(最多)一行,并且我希望它是具有最小值length(Form)的行。如果没有一些丑陋的加入,我无法弄清楚如何做到这一点。
这个查询当然只返回一行,而我想要多行,其中有多个WritingSystem值。
select Form,WritingSystem,_id from TextForms where InterpretationId=? limit 1;
这个查询正确地为WriteSystem的每个值返回一行,但是到目前为止我选择哪一行是任意的。
select Form,WritingSystem,_id from TextForms where InterpretationId=? group by WritingSystem;
答案 0 :(得分:1)
使用GROUP BY时,必须指定如何为每个组计算输出值。这通常使用MIN / MAX / COUNT / SUM等聚合函数来完成。
在SQLite 3.7.11及更高版本中,当您使用MIN / MAX时,其他列如_id
保证来自与MIN匹配的同一行:
SELECT Form, WritingSystem, _id, MIN(LENGTH(Form))
FROM TextForms
WHERE InterpretationId = ?
GROUP BY WritingSystem