我一直在玩弄各种聚合函数,以获得它们的感觉,在过去的几天我感到困惑之后,我需要澄清。我要么会有完全不直观的行为,要么会犯无益的错误。例如,我测试:
(pX==min_(Y,order_by=Z)) <= Y.in_(4,6,2)&Z.in_(6,)
查看示例输出:
p==X,Y,Z ((6,),4,6,2,6,6,6) p1==X,Y,Z ((6,),6,4,2,6,6) p2==X,Y,Z ((6,),4,2,6,6,6,6)
(pX==min_(Y,order_by=Z)) <= Y.in_(4,6,2)&Z.in_(0,)
输出:
p==X,Y,Z ((6,),4,6,2,0,0,0) p1==X,Y,Z ((6,),2,6,4,0,0,0) p2==X,Y,Z ((2,),2,6,4,0,0,0)
为什么X的输出--从6到2--根据所提供的索引变化?即使在前面的示例中输出是错误的,至少对于所使用的索引是一致的;在只有一个分钟/最大值的情况下,这使得从那时开始。
我至少可以看到使用min_、max_、sum_函数的输出;但是,当涉及到rank_和running_sum_时,我就迷路了。在定义我的函数时,我遵循类似的过程:
(pX==running_sum_(Z,group_by=Z,order_by=Z)) <= Z.in_(43,34,65)
我试着查看输出:
p==X
我知道错误:
追溯(最近一次调用):File "",第1行,在File "/usr/local/lib/python3.4/dist-packages/pyDatalog/UserList.py",第16行,在repr def repr(Self)中:返回repr(self.data)文件"/usr/local/lib/python3.4/dist-packages/pyDatalog/pyParser.py",行109,在data "/usr/local/lib/python3.4/dist-packages/pyDatalog/pyParser.py",() File "/usr/local/lib/python3.4/dist-packages/pyDatalog/pyParser.py",第566行中,在ask self._data = Body(self.pre_calculations,self).ask() File self.todo.ask第686行中,在ask self._data = literal.lua.ask() File "/usr/local/lib/python3.4/dist-packages/pyDatalog/pyEngine.py",中第909行,in _ invoke (子目标)文件"/usr/local/lib/python3.4/dist-packages/pyDatalog/pyEngine.py",第664行,在invoke todo.do() #获取thunk并执行it文件"/usr/local/lib/python3.4/dist-packages/pyDatalog/pyEngine.py",第640行,在do self.thunk() File "/usr/local/lib/python3.4/dist-packages/pyDatalog/pyEngine.py",第846行,在aggregate.complete(base_subgoal )中,(子目标)文件"/usr/local/lib/python3.4/dist-packages/pyDatalog/pyParser.py",第820行,完整的结果= tuple(l.terms)表示列表中的l(base_subgoal.facts.values()) AttributeError:'bool‘对象没有属性值。
这是什么意思?做错了什么?running_sum_ (和rank_)参数--‘group_ by’和'order_by‘所共有的关系是什么?
由于web上似乎没有示例,因此非常希望有2或3个rank_和running_sum_使用的简短示例。
发布于 2016-08-20 20:21:18
聚合子句分两个步骤解决:
下面是您如何编写第一个子句:
(p[None]==min_(Y, order_by=Y)) <= Y.in_((4,6,2))P后面的括号中的变量在SQL中用作"group by“,并且必须出现在子句的正文中。在这种情况下,它不会改变,所以我使用无。当您想要检索比您所订购的值更多的值时,需要order_by变量。
假设你想取回学校每班最年轻学生的名字。基谓词将是pupil(ClassName, Name, Age)。
+ pupil('1A', 'John', 8)
+ pupil('1B', 'Joe', 9)合计条款如下:
(younger[ClassName] == min_(Name, order_by= Age)) <= pupil(ClassName, Name, Age)然后查询如下:
(younger[ClassName]==X)https://stackoverflow.com/questions/38987592
复制相似问题