我正在将sqlite与python结合使用。假设我有一个像这样的数据表:
Name | Age
_______|____
Mike | 12
Jack | 45
Ben | 37
Anne | 19
问题:是否可以(使用sqlite)对列进行垂直排列?如果是这样,怎么办?我希望我的数据表看起来像这样(我不在乎“年龄”列中的单元被乱序的顺序):
Name | Age
_______|____
Mike | 45
Jack | 12
Ben | 19
Anne | 37
答案 0 :(得分:2)
由于您的SQLite版本不支持window function
和CTE
,因此您可以尝试创建一个临时表来存储数据以及ROWID
和random()
。
基于randomRn
创建一个random()
列,然后通过JOIN
和ROWID
号(随机rowID)randomRn
创建表
模式(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 |
注意
在使用完临时表后,请记住DROP
。
答案 1 :(得分:0)
您可以在下面的sql中使用,只需在下面的查询中的2个地方替换表名,然后查看结果即可。
select name, max ( age) age
from ( select name, age from ( select name, null age from temp_person order by random() )
union all
select name, age from ( select name, age from temp_person order by random() ) )
group by name