【发布时间】:2017-12-17 01:57:30
【问题描述】:
根据the docs、常识和一些常见SQL 手册,max 函数只返回最大值。所以选择具有最大值的行的正确方法是子查询:
select * from `table` where `a`=(select max(`a`) from `table`);
效率低下。 SQLite中有argmax之类的东西吗?
【问题讨论】:
标签: sql sqlite max aggregate-functions
根据the docs、常识和一些常见SQL 手册,max 函数只返回最大值。所以选择具有最大值的行的正确方法是子查询:
select * from `table` where `a`=(select max(`a`) from `table`);
效率低下。 SQLite中有argmax之类的东西吗?
【问题讨论】:
标签: sql sqlite max aggregate-functions
是的。只需使用
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 上有一个索引应该会非常快。如果没有索引,它会导致对table 进行两次序列扫描。
【讨论】:
要获得多行,您的解决方案绝对不会效率低下——假设您索引列a,在这种情况下您可能应该这样做。
create index myidx on mytable(a);
【讨论】: