我们有一些选择声明:
select id, data from mytable order by data;
是否可以在如此有序的数据集中获取给定id
的行的索引,而不会将所有行提取到id
并计数?
我正在使用sqlite3并且SQL的sqlite方言的答案更好,但是关于通用ANSI SQL的答案也可以。
答案 0 :(得分:2)
是。您可以使用聚合查询:
select count(*)
from mytable t
where t.data <= (select data from mytable where id = $id);
注意:这假定data
是唯一的。如果存在重复项,那么您可能需要等效rank
。这看起来像:
select 1 + count(*)
from mytable t
where t.data < (select data from mytable where id = $id);