如何在 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
因此,我在尝试对 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