2016-04-27 13 views
2

私はを持っています。29人のユーザーはの7200行で、10の異なるカテゴリの一意の要求チケットに参加しました。N個のランダムレコードを選択

これらのうち、Nのレコードを各ユーザーごとに選択する必要があります。

条件:Nのうち

  1. 、40%の行はカテゴリXのものとする必要があり、編集を言うことができます。

  2. 残りの60%の行はsqliteのを使用したカテゴリー以外のX

を使用したものである必要があり、私は「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

あなたはsqliteの答えを探しているように見えますが、この質問は 'python'をタグ付けされています。答えはsqliteと組み合わせてpythonを使っているのですか? –

+0

はい、私はこれらすべての事のためにPythonでsqliteを使用しています。 – Thuruv

答えて

0

[OK]をクリックしても、スペックについて少し混乱します。このコードが実行されますが、私は完全にあなたが探しているものを理解していないことがあります。

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

は、2グループのカウントサブクエリを実行している使用して考えてみましょう: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 
関連する問題