2017-07-12 34 views
0

the docsによれば、一般的な意味でのSQLとmaxの一部のマニュアルでは、最大値のみが返されます。したがって、最大値を持つ行を選択する正しい方法はサブクエリです。SQLiteで最大値/最小値を持つ行を選択

select * from `table` where `a`=(select max(`a`) from `table`); 

これは非効率的です。 SQLiteにargmaxのようなものがありますか?

答えて

1

the docsによると、SQLiteはmax()で行全体を選択することができます:

SELECT *, max(a) FROM MyTable; 

(。これは、バージョン3.7.11ので、サポートされています)

1

です。ただ1行で十分なら、

select max(`a`), * from `table`; 

を使用してください。残りの値は、最大値が取得される行に属します。

0

私は多くの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になるはずです。

0

つ以上の行を取得するには、あなたのソリューションは絶対にありは非効率的ではありません。あなたがこの状況ではおそらくそうであると指摘した列aを前提としています。

create index myidx on mytable(a); 
関連する問題