有多个选项时选择特定行

时间:2014-12-01 05:39:54

标签: sqlite select

这是一个从表中选择行的查询。该表是可能有许多行与特定(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;

1 个答案:

答案 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