我有 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 中有方法,我很乐意了解它。
最佳答案
考虑使用两个分组的运行计数子查询: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
关于python - 选择 N 条随机记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902113/