2016-04-27 81 views
2

我有7200行29个用户谁出席了10个不同类别的独特请求票。选择N个随机记录

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

条件:

  1. 缺货的N,40点%的行应是那些一个类别X的,可以说,编辑。

  2. 剩下的60%的行应该是那些使用非目录X

使用SQLite,我迄今为止所处理试图通过“独立的”,但有没有办法实现上述其他?

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

看起来你正在寻找一个sqlite的答案,但这个问题被标记'python'。使用python与sqlite结合使用的答案是吗? –

+0

是的,我在Python中使用sqlite来处理所有这些事情。 – Thuruv

回答

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() 
+0

@ t-arboreus如果是这样,我如何为列出的每个用户都做到这一点。 。? – Thuruv

+0

我编辑了回复。希望我明白你在找什么。 –

+0

嗯,它引发** ValueError:参数是不受支持的类型**。 – Thuruv

1

考虑使用运行两个分组计数的子查询:1)所有记录的名字,只有编辑类; 2)所有记录按名称和非编辑类别筛选为60%和40%。以下假设表格具有唯一标识符ID。并与实际数量更换NWHERE条款:

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