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
。
することにより、グループの様々な組み合わせを使用して、私はどちらかの行を取得することができるよ1
と2
または行を1
して4
。自分のやりたいことを実行するSQLコンポーネントが不足しているように感じますが、それが何であるかを理解することができませんでした。
このタイプのクエリを実行する適切な方法は何ですか?
可能な解決策
これを行う方法を見つけました。自分の質問に答えるほど評判がよくないので、ここで更新を行っています。それが常に正しいのか、それとも効率がどの程度なのかはわかりません。コメントは大歓迎です。
1つのクエリでテキストの一意の値ごとにnumの最小値を見つける、複合selectステートメントを使用しました。
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
次に、これをテーブル全体と結合して、これら2つの列に一致するすべての行を取得します。
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