SQL示例组

时间:2018-09-05 14:36:04

标签: performance sqlite random

我有一个sqlite数据库,我可以读为:

In [42]: df = pd.read_sql("SELECT * FROM all_vs_all", engine)                                                                                                                                                   


In [43]:                                                                                                                                                                                                        
In [43]: df.head()                                                                                                                                                                                              
Out[43]:                                                                                                                                                                                                        
                             user_data                           user_model  \                                                                                                                                  
0  037d05edbbf8ebaf0eca@172.16.199.165  037d05edbbf8ebaf0eca@172.16.199.165                                                                                                                                     
1  037d05edbbf8ebaf0eca@172.16.199.165   060210bf327a3e3b4621@172.16.199.33                                                                                                                                     
2  037d05edbbf8ebaf0eca@172.16.199.165   1141259bd36ba65bef02@172.21.44.180                                                                                                                                     
3  037d05edbbf8ebaf0eca@172.16.199.165  209627747e2af1f6389e@172.16.199.181                                                                                                                                     
4  037d05edbbf8ebaf0eca@172.16.199.165  303a1aff4ab6e3be82ab@172.21.112.182                                                                                                                                     

      score  Class   time_secs model_name  bin_id                                                                                                                                                               
0  0.283141      0  1514764800       Flow       0                                                                                                                                                               
1  0.999300      1  1514764800       Flow       0                                                                                                                                                               
2  1.000000      1  1514764800       Flow       0                                                                                                                                                               
3  0.206360      1  1514764800       Flow       0                                                                                                                                                               
4  1.000000      1  1514764800       Flow       0                                                                                                                                                               

由于表太大,我没有阅读完整的表,而是选择了行的随机子集:

这可以很方便地完成,因为:

 random_query = "SELECT * FROM all_vs_all WHERE abs(CAST(random() AS REAL))/9223372036854775808 < %f AND %s" % (ratio, time_condition)                                                                       
    df = pd.read_sql(random_query, engine)                                                                                                                                                                      

问题在于,对于每个三元组[user_data, user_model, time_secs],我想获取包含该三元组的所有行。每个三元组出现1或2次。

执行此操作的一种可能方法是,首先对一组三元组进行随机采样,然后获取具有所选三元组之一的所有行,但这似乎太慢了。

有没有一种有效的方法?

编辑:如果我可以将所有数据加载到熊猫中,我会做类似的事情:

selected_groups = []
for group in df.groupby(['user_data', 'user_model', 'time_secs']):
    if np.random.uniform(0,1) > ratio:
       selected_groups.append(group)
res = pd.concat(selected_groups)

1 个答案:

答案 0 :(得分:0)

很少有示例联接和sql查询:

当前被承认:

Select p.patient_no, p.pat_name,p.date_admitted,r.room_extension,p.date_discharged FROM Patient p JOIN room r ON p.room_location = r.room_location where p.date_discharged IS NULL ORDER BY p.patient_no,p.pat_name,p.date_admitted,r.room_extension,p.date_discharged;

空房间:

SELECT r.room_location, r.room_accomadation, r.room_extension FROM room r where r.room_location NOT IN (Select p.room_location FROM patient.p where p.date_discharged IS NULL) ORDER BY r.room_location, r.room_accomadation, r.room_extension;

尚无收费:

SELECT p.patient_no, p.pat_name, COALESCE (b.charge,0.00) charge FROM patient p LEFT JOIN billed b on p.patient_no = b.patient_no WHERE p.patient_no NOT IN (SELECT patient_no FROM billed) group by p.patient_no ORDER BY p.patient_no, p.pat_name,charge;

最高薪水:

SELECT phy_id,phy_name, salary FROM physician where salary in (SELECT MAX(salary) FROM physician) UNION
SELECT phy_id,phy_name, salary FROM physician where salary in (SELECT MIN(salary) FROM physician) ORDER BY phy_id,phy_name, salary;

消耗的各种物品

select p.pat_name, i.discription, count (i.item code) as item code from patient p join billed b on p.patient no = b. patient no join item i on b.item code = i.item code group by p.patient no, i.item code order by..

未接受治疗的患者

 SELECT p.patient_no,p.pat_name FROM patient p where p.patient_no NOT IN (SELECT t.patient_no FROM treats t) 
ORDER BY p.patient_no,p.pat_name;

2高薪:

Select phy_id, phy_name, date_of_joining, max(salary) as salary from physician group by salary having salary IN (Select salary from physician)
Order by phy_id, phy_name, date_of_joining, salary limit 2;

超过200:

select patient_no, sum (charge), as total charge from billed group by patient no having total charges > 200 order by patient no, total charges