Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择N个随机记录_Python_Sql_Sqlite - Fatal编程技术网

Python 选择N个随机记录

Python 选择N个随机记录,python,sql,sqlite,Python,Sql,Sqlite,我有7200行29个用户,他们参加了10个不同类别的独特请求票证 其中,我需要为每个用户选择N条记录 条件: 比如说,在N行中,40%的行应该是X类的行 其余60%的行应为使用非类别X的行 使用sqlite,到目前为止,我通过尝试“DISTINCT”进行处理,但是有没有办法实现上述目标 select distinct * from report where category <> 'Editorial' and name in (select distinct name from

我有7200行29个用户,他们参加了10个不同类别的独特请求票证

其中,我需要为每个用户选择N条记录

条件:

比如说,在N行中,40%的行应该是X类的行

其余60%的行应为使用非类别X的行

使用sqlite,到目前为止,我通过尝试“DISTINCT”进行处理,但是有没有办法实现上述目标

select distinct * from report 
where category <> 'Editorial'
and 
name in (select distinct name from report)
GROUP By name
LIMIT (select count(distinct name) from report)
编辑:我正在使用python完成上述所有操作的其余部分。由于它是一个大数据,我更喜欢sqlite。
如果python中有一种方法,我很乐意了解它。

好的,对您的规范仍然有点困惑。这段代码将运行,但我可能不完全理解您在寻找什么:

import sqlite3

conn = sqlite3.connect('users.db')

cur = conn.cursor()

count = cur.execute('SELECT COUNT(id) FROM book')

count = count.fetchone()[0]

total1 = int(count * 0.4)
total2 = int(count * 0.6)

results1 = cur.execute('SELECT users.id from users LIMIT ?',
                       (total1, )).fetchall()
results2 = cur.execute('SELECT users.id from users LIMIT ?',
                       (total2, )).fetchall()

考虑使用两个分组的运行计数子查询:1按名称和编辑类别列出所有记录;和2所有记录按名称和非编辑类别分类,并筛选为60%和40%。下表假设具有唯一标识符ID,并将WHERE子句中的N替换为实际数字:

SELECT *    
FROM 
(
  SELECT Report.*

      (SELECT Count(*) FROM Report sub1
       WHERE sub1.Category = 'Editorial' AND Report.Category = 'Editorial'
       AND sub1.Name = Report.Name
       AND sub1.ID <= Report.ID) As EditorialRowNo

      (SELECT Count(*) FROM Report sub2
       WHERE sub2.Category <> 'Editorial' AND Report.Category <> 'Editorial'
       AND sub2.Name = Report.Name
       AND sub2.ID <= Report.ID) As NonEditorialRowNo

  FROM Report
) As dT

WHERE (dT.EditorialRowNo > 0 AND dT.EditorialRowNo <= 0.4 * N)
OR (dT.NonEditorialRowNo > 0 AND dT.NonEditorialRowNo <= 0.6 * N)
ORDER BY dT.Name, dT.Category

看起来您正在寻找sqlite的答案,但这个问题被标记为python。将python与sqlite结合使用可以吗?是的,我在python中使用sqlite来完成所有这些事情。@t-Arbereus如果可以,我如何才能为列出的每个用户做到这一点。?我已经编辑了回复。希望我能理解你在找什么。嗯,它抛出ValueError:参数是不受支持的类型。对不起,有点假密码。你不能在元组中进行乘法,只需在外部进行运算,然后在内部进行传递,是的,也这样做了。我还是犯了同样的错误。你能做一个吗?