SQLite Random()在ORDER BY中没有正确排序

Lim*_*awk 5 sql sqlite sorting android sql-order-by

我的SQLite查询似乎是从规定的"ORDER BY"子句返回结果.当我运行以下命令时,第三列IS给出了我想要的随机值,但是ORDER BY看起来被忽略了.结果集看似随机排序.

// frequency is an int of either 5, 10, or 15
String query = "SELECT id, name, ABS( RANDOM() % frequency ) FROM person ORDER BY 3"

SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.rawQuery(query, null);
Run Code Online (Sandbox Code Playgroud)

返回类似于:

id    name    (random)
------------------------------
16    Joe     1
 4    Jack    0
67    Jane    7
23    Bob     3
Run Code Online (Sandbox Code Playgroud)

我尝试过很多变种,包括以下内容,但都有类似的结果:第三列没有排序的行:

"SELECT id, name, (RANDOM() % frequency) AS myRand FROM person ORDER BY myRand"
id    name    myRand
------------------------------
23    Bob     2
16    Joe     1
67    Jane    -4
 4    Jack    0
Run Code Online (Sandbox Code Playgroud)

要么

"SELECT id, name, CAST(ABS( RANDOM() % frequency ) AS TEXT) AS myRand FROM person ORDER BY myRand"

id    name    myRand
------------------------------
23    Bob     "1"
16    Joe     "2"
67    Jane    "1"
 4    Jack    "5"
Run Code Online (Sandbox Code Playgroud)

无奈之下,我甚至试过这个......

"SELECT id, name, 'A' || CAST(ABS( RANDOM() % frequency ) AS TEXT) AS myRand FROM person ORDER BY myRand"
id    name    myRand
------------------------------
 4    Jack    "A9"
23    Bob     "A3"
67    Jane    "A8"
16    Joe     "A2"
Run Code Online (Sandbox Code Playgroud)

当然,第三列的实际结果值对于每次运行都是不同的,但第三列缺少排序是一致的.为什么结果不按第三列排序?

laa*_*lto 1

为什么结果不按第三列排序?

因为该列是一个出于目的而重新评估的表达式ORDER BY,会产生不同的随机值。

抱歉,目前无法想出一种实用的方法来保留每行的随机顺序值。考虑更改您的要求 -ORDER BY RANDOM()无论如何在大型数据集上表现不佳。