Поскольку ваша версия SQLite не поддерживает window function
и CTE
, поэтому вы можете попытаться создать временную таблицу для переноса ваших данных и ROWID
и random()
.
Создайте randomRn
основание столбца на random()
, затем JOIN
таблицу с ROWID
и randomRn
числом (случайный rowID)
Схема (SQLite v3.16)
CREATE TABLE T(
Name VARCHAR(50),
Age INT
);
INSERT INTO T VALUES ('Mike', 12);
INSERT INTO T VALUES ('Jack', 45);
INSERT INTO T VALUES ('Ben', 37);
INSERT INTO T VALUES ('Anne', 19);
CREATE TABLE temp1
AS
SELECT AGE,Name,ROWID,random() rn
FROM T
Запрос № 1
SELECT t1.Name name,t2.Age age
FROM temp1 t1 JOIN
(
SELECT *,(
select count(*)
from temp1 tt
where tt.rn >= t1.rn
) randomRn
FROM temp1 t1
) t2 on t1.rowid = t2.randomRn;
| name | age |
| ---- | --- |
| Ben | 12 |
| Anne | 45 |
| Mike | 37 |
| Jack | 19 |
Просмотр на БД Fiddle
Примечание
запомните DROP
временную таблицу, когда вы закончите ее использовать.