the docsによれば、一般的な意味でのSQLとmax
の一部のマニュアルでは、最大値のみが返されます。したがって、最大値を持つ行を選択する正しい方法はサブクエリです。SQLiteで最大値/最小値を持つ行を選択
select * from `table` where `a`=(select max(`a`) from `table`);
これは非効率的です。 SQLiteにargmax
のようなものがありますか?
the docsによれば、一般的な意味でのSQLとmax
の一部のマニュアルでは、最大値のみが返されます。したがって、最大値を持つ行を選択する正しい方法はサブクエリです。SQLiteで最大値/最小値を持つ行を選択
select * from `table` where `a`=(select max(`a`) from `table`);
これは非効率的です。 SQLiteにargmax
のようなものがありますか?
です。ただ1行で十分なら、
select max(`a`), * from `table`;
を使用してください。残りの値は、最大値が取得される行に属します。
私は多くのSQLiteを使用していませんでしたが、私は
select l.* from `table` l join (select * from `table` order by `a` desc limit 1) r on l.`a` = r.`a`;
が良好な性能を与えるべきだと思います。 a
にインデックスを付けると、それは本当に速くなるはずです。インデックスがなければ、2つのシーケンススキャンがtable
になるはずです。
つ以上の行を取得するには、あなたのソリューションは絶対にありは非効率的ではありません。あなたがこの状況ではおそらくそうであると指摘した列a
を前提としています。
create index myidx on mytable(a);