使用不同的基线来查询数据
我有这样的数据:
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)