在SQLite中选择具有最大/最小值的行

时间:2017-07-12 14:51:28

标签: sql sqlite max aggregate-functions

根据the docs,常识和常见SQL的一些手册,max函数仅返回最大值。因此,选择具有最大值的行的正确方法是子查询:

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

效率低下。在SQLite中有类似argmax的内容吗?

4 个答案:

答案 0 :(得分:2)

根据the docs,SQLite允许选择max()的整行:

SELECT *, max(a) FROM MyTable;

(自版本3.7.11起支持此版本。)

答案 1 :(得分:1)

是的。只需使用

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

如果单行足够你。其余值将属于从中获取最大值的行。

答案 2 :(得分:0)

我没有多少使用SQLite,但我认为

select l.* from `table` l join (select * from `table` order by `a` desc limit 1) r on l.`a` = r.`a`;

应该表现出色。在a上建立索引应该会让它变得非常快。如果没有索引,它应该导致table的两次序列扫描。

答案 3 :(得分:0)

要获得多行,您的解决方案绝对效率低 - 假设您已编入索引列a,在这种情况下您应该这样做。

create index myidx on mytable(a);