Hierarchical Queries in Oracle

有一些表存在层级关系,例如Oracle的示例表hr.employees:

LAST_NAMEEMPLOYEE_IDMANAGER_ID
King100-
Kochhar101100
De Haan102100
Hunold103102
Ernst104103

可以看到每个员工有自己的manager,从而形成类似这样的层级关系:

Description of Figure 9-1 follows

 King是最大的领导,因此他就是root,下面有其它小领导并形成了分支和层级。下面来看Oracle提供的Hierarchical Queries能做什么。

SELECT last_name, employee_id, manager_id
FROM hr.employees
CONNECT BY PRIOR employee_id = manager_id

这里connect by prior表明了层级关系是怎么形成的。注意这里仅仅是表明关系,查询结果并不会因为该子句发生变化。

SELECT last_name, employee_id, manager_id, LEVEL
FROM hr.employees
CONNECT BY PRIOR employee_id = manager_id

这里level伪列表明了层级关系,查询结果是:

LAST_NAMEEMPLOYEE_IDMANAGER_IDLEVEL
Kochhar1011001
Greenberg1081012
Faviet1091083
Popp1131083

可以看到Kochhar的领导是100,因此他是level 1,Greenberg是领导是101,因此他是level 2。注意这里由于最大的领导king没有领导了,因此没有显示出来。如果要显示King的层级,则:

SELECT last_name, employee_id, manager_id, LEVEL
FROM hr.employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id

表示从root开始计算level,结果是:

LAST_NAMEEMPLOYEE_IDMANAGER_IDLEVEL
King100-1
Kochhar1011002
Greenberg1081013
Faviet1091084

最后一个要说明的功能是排序。除了可以使用普通的排序外,这里还支持order siblings by:

SELECT last_name, employee_id, manager_id, LEVEL
FROM hr.employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name;

sibling的英文是兄弟姐妹,因此表示在同一个level下的,同一分支下的所有成员按照last_name排序。对应文章最开始的树状结构,就是2,7,9这三个人按last name排序显示(因为他们相当于兄弟姐妹),5,6按ast name排序显示,但11不参与5,6的排序。

查询结果如下。可以看到同为level 2,Cambrault,De Haan和Errazuriz并没有显示在一起,但显然他们是有序的(c在前,然后是d,e)。而manager都是148的员工(因为在一个分支下,互为兄弟姐妹)则按照last name排序显示(由于这一支在level 3就到头了,所以这6个员工全部排在一起)。

LAST_NAMEEMPLOYEE_IDMANAGER_IDLEVEL
King100-1
Cambrault1481002
Bates1721483
Bloom1691483
Fox1701483
Kumar1731483
Ozer1681483
Smith1711483
De Haan1021002
Hunold1031023
Austin1051034
Ernst1041034
Lorentz1071034
Pataballa1061034
Errazuriz1471002
Ande1661473
Banda1671473

观察结果的顺序,相当于从root开始遍历,遍历完一个分支之后,遍历下一个分支:最开始是king,他有三个下属:Cambrault,De Haan和Errazuriz(按last name排序)。因此从Cambrault开始遍历,紧接着是Cambrault的6个下属(都按last name排序)。由于这支到level 3就结束了,因此回到king的第二个下属De Haan,继续往下遍历,直到遍历完所有的成员。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在模型无关的分层强化学习中,学习表示是一项重要的任务。学习表示是指通过提取有用的信息和特征来将观察数据转化为表示向量。这些表示向量可以用于解决强化学习问题中的决策和行动选择。 模型无关的分层强化学习是指不依赖于环境模型的强化学习方法。它通常由两个部分组成:低层控制策略和高层任务规划器。低层控制策略负责实际的行动选择和执行,而高层任务规划器则负责指导低层控制策略的决策过程。 学习表示在模型无关的分层强化学习中起到至关重要的作用。通过学习适当的表示,可以提高对观察数据的理解能力,使得模型能够捕捉到环境中的重要特征和结构。这些表示可以显著减少观察数据的维度,并提供更高层次的抽象,从而简化了决策和规划的过程。 学习表示的方法多种多样,包括基于深度学习的方法和基于特征选择的方法。基于深度学习的方法,如卷积神经网络和循环神经网络,可以通过学习多层次的特征表示来提取环境观察数据的有用信息。而基于特征选择的方法则通过选择最有信息量的特征来减少表示的维度,从而简化了模型的复杂度。 总之,学习表示在模型无关的分层强化学习中起到了至关重要的作用。通过学习适当的表示,模型可以更好地理解观察数据并进行决策和规划。不同的方法可以用来实现学习表示,包括基于深度学习的方法和基于特征选择的方法。这些方法的选择取决于具体任务和问题的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值