根据the docs,常识和常见SQL的一些手册,max
函数仅返回最大值。因此,选择具有最大值的行的正确方法是子查询:
select * from `table` where `a`=(select max(`a`) from `table`);
效率低下。在SQLite中有类似argmax
的内容吗?
答案 0 :(得分:2)
答案 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);