35

这是我在下面给出的查询。

select * from data where value = "yes";

我的 id 是自动递增的,下面是给定查询的结果。

id || value 
1  ||   yes
3  ||   yes
4  ||   yes
6  ||   yes
9  ||   yes

如何在 sqlite 中使用 ROW_NUMBER?这样我就可以得到下面给出的结果。

NoId || value 
1    ||   yes
2    ||   yes
3    ||   yes
4    ||   yes
5    ||   yes

ROW_NUMBER 作为编号。

4

4 回答 4

28

SQLite Release 3.25.0将增加对窗口函数的支持

2018-09-15 (3.25.0)

  1. 添加对窗口函数的支持

窗口功能

窗口函数是一种特殊的 SQL 函数,其中输入值取自 SELECT 语句结果集中的一个或多个行的“窗口”。

SQLite 支持以下 11 个内置窗口函数:

行号()

当前分区中的行号。行从 1 开始按窗口定义中的 ORDER BY 子句定义的顺序编号,否则按任意顺序编号。

因此,您的查询可以重写为:

select *, ROW_NUMBER() OVER(ORDER BY Id) AS NoId
from data 
where value = "yes";

db-fiddle.com 演示

于 2018-08-15T16:50:47.787 回答
27

试试这个查询

select id, value, (select count(*) from tbl b  where a.id >= b.id) as cnt
from tbl a

小提琴

| id | value | cnt |
--------------------
|  1 |   yes |   1 |
|  3 |   yes |   2 |
|  4 |   yes |   3 |
|  6 |   yes |   4 |
|  9 |   yes |   5 |
于 2013-05-31T04:13:27.830 回答
2

我对 fiddleanswer 进行了一些修改,并得到了预期的结果

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
于 2014-01-15T13:30:41.617 回答
2

更新:sqlite3 3.25 版现在支持窗口函数,包括:

row_number() over(按 id 排序)

SQLITE3 文档

于 2018-10-27T23:12:47.010 回答