在Sqlite 3中,我试图弄清楚如何根据最小值选择行。我认为我受限制的原因是对相关术语的了解不足,无法有效地搜索Google。
该表如下所示:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
我想获得的行num2
是1, 2
和4
。我想基于num的最小值为文本列的每个唯一值进行选择。
因此,对于text = 'a'
中,最小值num
是0
,所以我想行1和2 text = 'b'
,最小值num
是1
,所以我想排4
。
使用group by的各种组合,我可以获取row 1
和2
或rows 1
and 4
。我感觉好像缺少一个可以满足我想要的SQL组件,但是我一直无法弄清楚它可能是什么。
进行此类查询的正确方法是什么?
可能的解决方案
我找到了一种方法。我的声誉不足以回答我自己的问题,因此我在这里进行更新。我不确定这是否总是正确的或者效率是什么样的。欢迎任何意见。
我使用了复合选择语句,其中一个查询为文本的每个唯一值找到num的最小值:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
然后,我将其与完整表结合在一起,以获取与这两列匹配的所有行。
sqlite> with u as
( select num, text from t group by text having num = min( num ) )
select t.* from t join u on t.num = u.num and t.text = u.text;
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 b 4