sqlite 取得結果集行號的方法
這幾天遇到了一個問題,使用sqlite怎樣取得結果集的行號?
sqlite中無法使用ROWNUM(),有的網友建議使用rowid。但rowid記錄的是原表中的行號,並不是查詢結果集的行號。
在網上查了好久也沒有找到合適的解決問題方法。
後來終於在一個英文網站上找到了完美解決問題方法,分享出來,希望廣大中國網友通過中文也能檢索到這個方法。
【問題描述】
有這樣一個sqlite database table
rowid | name
-------------
1 | John Doe
2 | Jane Smith
3 | Aaa
4 | Baaaaa
5 | Caa
6 | Dddd
7 | Eeeee
8 | Ffff
9 | Ggggg
10 | Hhhh
11 | Iiiii
12 | Jjj
13 | Kkkk
對該表按照name進行排序,rowid記錄的是原表中的實際行號
rowid | name
-------------
3 | Aaa
4 | Baaaaa
5 | Caa
6 | Dddd
7 | Eeeee
8 | Ffff
9 | Ggggg
10 | Hhhh
11 | Iiiii
2 | Jane Smith
12 | Jjj
1 | John Doe
13 | Kkkk
【期望結果】
期望得到查詢結果集的邏輯行號,如下面的rowNum
rowid | name | rowNum
---------------------------
3 | Aaa | 1
4 | Baaaaa | 2
5 | Caa | 3
6 | Dddd | 4
7 | Eeeee | 5
8 | Ffff | 6
9 | Ggggg | 7
10 | Hhhh | 8
11 | Iiiii | 9
2 | Jane Smith | 10
12 | Jjj | 11
1 | John Doe | 12
13 | Kkkk | 13
【解決辦法】
SELECT
(SELECT COUNT(*)
FROM Names AS t2
WHERE t2.name < t1.name
) + (
SELECT COUNT(*)
FROM Names AS t3
WHERE t3.name = t1.name AND t3.id < t1.id
) + 1 AS rowNum,
id,
name
FROM Names t1
ORDER BY t1.name ASC