我有不同的表:A、B、C ... 我想从每个表中选择一定数量的行并进行合并
我使用了这个查询(给定的数字 = 100):
sql_query = ''' SELECT * FROM A ORDER BY RANDOM() LIMIT 100
UNION SELECT * FROM B ORDER BY RANDOM() LIMIT 100 '''
但是当我尝试读取 DataFrame 时:
df=pd.read_sql(sql_query, con)
我有一个错误:
DatabaseError: Execution failed on sql : LIMIT clause should come after UNION not before
如果我在 UNION 之后使用 LIMIT 子句,它只会返回给定的行数,但我不知道从每个表中提取了多少行。
示例:如果我想要 A 中的 100 行和 B 中的 100 行,在 UNION 之后使用 LIMIT 200 子句,我将有 200 行,但我不知道从 A 和 B 中提取了多少行
谢谢你的帮助,
最佳答案
考虑使用派生表(FROM
子句中的子查询)来设置LIMIT
。您可能还希望 UNION ALL
保留重复项,否则每个表收到的记录可能少于 100 条。
sql_query = ''' SELECT *
FROM (SELECT * FROM A ORDER BY RANDOM() LIMIT 100)
UNION ALL
SELECT *
FROM (SELECT * FROM B ORDER BY RANDOM() LIMIT 100)'''
或者,迭代读取每个表并连接到最终数据帧:
sql_query = 'SELECT * FROM {} ORDER BY RANDOM() LIMIT 100'
df_list = [pd.read_sql(sql_query.format(t), con) for t in ['A', 'B']]
df = pd.concat(df_list, ignore_index=True)
关于python - 使用来自多个表的随机行的 SELECT UNION 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48209383/