如何在sqlite中使用行数
下面是我的问题如何在sqlite中使用行数,sqlite,android-sqlite,row-number,Sqlite,Android Sqlite,Row Number,下面是我的问题 select * from data where value = "yes"; NoId || value 1 || yes 2 || yes 3 || yes 4 || yes 5 || yes 我的id是自动递增的,下面是给定查询的结果 id || value 1 || yes 3 || yes 4 || yes 6 || yes 9 || yes 如何在sqlite中使用行号?这样我就
select * from data where value = "yes";
NoId || value
1 || yes
2 || yes
3 || yes
4 || yes
5 || yes
我的id是自动递增的,下面是给定查询的结果
id || value
1 || yes
3 || yes
4 || yes
6 || yes
9 || yes
如何在sqlite中使用行号?这样我就可以得到下面给出的结果
select * from data where value = "yes";
NoId || value
1 || yes
2 || yes
3 || yes
4 || yes
5 || yes
行号为NoId。尝试此查询
select id, value, (select count(*) from tbl b where a.id >= b.id) as cnt
from tbl a
我用提琴般的回答做了一些修补,结果完全符合预期
select id, value ,
(select count(*) from data b where a.id >= b.id and b.value='yes') as cnt
from data a where a.value='yes';
result
1|yes|1
3|yes|2
4|yes|3
6|yes|4
9|yes|5
将添加对窗口功能的支持
2018-09-15(3.25.0)
: 窗口函数是一种特殊的SQL函数,其中输入值取自SELECT语句结果集中一行或多行的“窗口” SQLite支持以下11个内置窗口函数: 行号() 当前分区内的行数。行从1开始按窗口定义中order by子句定义的顺序编号,或按任意顺序编号 因此,您的查询可以重写为:
select *, ROW_NUMBER() OVER(ORDER BY Id) AS NoId
from data
where value = "yes";
更新:sqlite3 3.25版现在支持窗口功能,包括: 行号()超过(按id排序)
id是自动递增还是PK列?您是否尝试过
选择_ROWID_uu
?@Scotch:它不是完全重复的,因为OP似乎询问的是完整表扫描的ROWID,而不是特定查询的ROWID。@AlixAxel所以查询整个表?@Scotch:数据似乎表明,是的。我知道用链接到的答案也可以克服这一点,但这可能是不必要的,而且速度较慢(取决于id
的列定义)。请检查小提琴。它仅使用sqllite。。您可以发布您正在使用的查询吗..这只意味着,SQLite中没有这样的功能。顺便问一下,我想知道这是不是O(n^2)…是的,这是n^2-ish。别这样:)太好了。它在聚合函数上也能很好地工作。+1我要感谢您提供了这些关键信息。在过去的一天里,我一直在绞尽脑汁,试图弄明白为什么在使用java JDBC驱动程序使用row_number函数时出现语法错误。在看到你的评论并意识到我正在运行3.20.1版之前,我找不到任何关于它的信息。升级版本后,我现在可以使用窗口功能!!再次感谢。