我有 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中有一种方法,我很乐意了解它。
答案 0 :(得分:1)
考虑使用两个分组的运行计数子查询:1)所有记录按名称和仅编辑类别; 2)所有记录按名称和非编辑类别和过滤60%和40%。以下假设表具有唯一标识符ID
。并将N
子句中的WHERE
替换为实际数字:
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
答案 1 :(得分:0)
好的,对你的规格还是有点困惑。此代码将运行,但我可能无法完全理解您正在寻找的内容:
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()