使用不同的基线来查询数据

我有这样的数据:

data_ company result ID group cars 50 q1 ground boats 0 q1 water bicycles 50 q2 ground cars 75 q2 water horses 0 q2 ground foxes 50 q5 ground .....etc 

所以我想问一下下面的问题:

哪些地面公司的结果与汽车公司不同,哪个季度(ID)发生了这种情况?

实质上上面的结果是:

 horses, q2 (result: 0, differs from cars 75) bicycles, q2 (result: 50, differs from cars 75) 

我正在使用Excel或Access来执行此操作。 但如果有人有更好的build议,我会很高兴听到。

我觉得我可以在Excel中pipe理一个半自动方法,获取基线数据,然后使用VLOOKUP和IF-formula的组合提出问题。 所以像这样的东西:

 baseline_ company result id cars 50 q1 cars 75 q2 

然后问:哪个Q1地面群体的结果与50不同? 第二季度的地面群体结果与75不同?

即使像这样分裂,也是一种可能性:

 groups_ground company result id cars etc. etc. foxes etc. etc. horses etc. etc. bicycles etc. etc. 

但所有这些方法都有点乏味,因为我的数据是500k +行。

SQL我在想像这样的:

 SELECT * FROM data_ D LEFT JOIN baseline_ B ON D.result=!B.result; 

你的SQL沿着正确的路线。 但是你需要寻找匹配,然后select不匹配的匹配,所以它需要更多的条件:

 SELECT d.* FROM data d LEFT JOIN data dcars ON d.result = dcars.result and dcars.company = 'cars' WHERE d.group = 'ground' and dcars.company is null; 
 data = [['cars', 50, 'q1', 'ground'], ['boat', 0, 'q1', 'water'], ['bicycles', 50, 'q2', 'ground'], ['cars', 75, 'q2', 'water'], ['horses', 0, 'q2', 'ground'], ['foxes', 50, 'q5', 'ground']] data_dict = {i[2]: i[1] for i in data if i[0] == 'cars'} for i in data: if i[3] == 'ground' and i[0] != 'cars': if i[2] != data_dict.get(i[2]): print("{}, {} (result: {}, differs from cars {})".format(i[0], i[2], i[1], data_dict.get(i[2]))) 

结果:

 bicycles, q2 (result: 50, differs from cars 75) horses, q2 (result: 0, differs from cars 75) foxes, q5 (result: 50, differs from cars None)