如何在 SQLite ORDER BY 上混合使用 ASC 和 RANDOM()

How to mix ASC and RANDOM() on SQLite ORDER BY

因此,我在尝试对 2 列使用 ORDER BY 时遇到错误:

... ORDER BY val, random();

错误是:“第二个 ORDER BY 术语与结果集中的任何列都不匹配”

我尝试了不同的方法来组合第一列的 ASC 排序和第二列的随机排序,但没有成功。

已更新以提供更多信息

创建 TABLE tabela ( id 整数, val 文字, 主键(id) );

INSERT INTO tabela (val) VALUES ('paid');
INSERT INTO tabela (val) VALUES ('paid');
INSERT INTO tabela (val) VALUES ('paid');
INSERT INTO tabela (val) VALUES ('standard');
INSERT INTO tabela (val) VALUES ('standard');
INSERT INTO tabela (val) VALUES ('standard');
INSERT INTO tabela (val) VALUES ('standard');
INSERT INTO tabela (val) VALUES ('standard');

预期样本结果:

val        id
---        ---
paid       3
paid       1
paid       2
standard   5
standard   8
standard   4
standard   6
standard   7

其中 'id' 1,2,3 将在 'paid' 'val' 内随机排序,而 'id' 4 ... 8 将在 [=36] 内随机排序=] 'val'

select val, id from (select random() as r, * from tabela) order by val, r;

诀窍是制作一个动态 table(在 (...) 内),其中有一列包含随机值。可以通过它来订购。
请注意,此查询是 sorting/ordering 即时 table 的完整行。

输出 1:

paid|1  
paid|3  
paid|2  
standard|8  
standard|5  
standard|7  
standard|6  
standard|4  

输出 2:

paid|3  
paid|1  
paid|2  
standard|5  
standard|8  
standard|7  
standard|4  
standard|6  

请原谅我的印象是您在考虑对列进行排序。如果您仅使用 (...) 中的子查询,研究输出然后想象 "manually" 对行进行排序,同时不允许更改任何行,这可能会帮助您看到差异。

这是即时查询 table(有额外的排序):

select random() as r, * from tabela order by val, id;  

及其输出:

6112298175921944810|1|paid  
-750320757383183987|2|paid  
-4687754812847362857|3|paid  
574487853771424670|4|standard  
6662074554381494613|5|standard  
5947282373212186891|6|standard  
-695595223160523440|7|standard  
-6914056362765123037|8|standard