我对Oracle很新,对分类数据完全陌生,所以请耐心等待......
我有一个如下所示的大型数据表:
| tax_id | value |
|:------:|:-----:|
| 211 | 56.4 |
| 326 | 2.7 |
| 47 | 89.6 |
| 569 | 43.2 |
| … | … |
tax_id
列通常指定种,但有时它更通用,例如指定分类树中的属,顺序或更高级别。
我想通过汇总不同分类级别的value
列来计算摘要统计信息。为此,我需要加入其他分类信息,因此我从NCBI分类数据库下载了ncbi_nodes
表的副本。这个表很大(大约150万行),它看起来像这样:
| tax_id | parent_id | rank |
|:------:|:---------:|:----:|
| 211 | 209 | 4 |
| 2 | 131567 | 28 |
| 209 | 72293 | 8 |
| 1224 | 2 | 24 |
| 29547 | 68525 | 21 |
| 68525 | 1224 | 23 |
| 72293 | 213849 | 12 |
| 131567 | 1 | 0 |
| 213849 | 29547 | 17 |
rank
列采用0到28之间的整数值,并指定每个tax_id
的分类级别。较低的等级指定更详细的分类等级(例如等级4是物种,等级8是属等),除了等级= 0,其对应于"无等级/未定义"。
此表具有递归/层次结构,我不确定如何最好地使用它来聚合我的数据。我最初的想法是试图“压扁”#34;它所以排名显示为列,如下所示:
| tax_id | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
|--------|--------|---|---|---|-----|---|---|---|-----|---|----|----|-------|----|----|----|----|--------|----|----|----|-------|----|-------|------|----|----|----|----|
| 211 | 131567 | | | | 211 | | | | 209 | | | | 72293 | | | | | 213849 | | | | 29547 | | 68525 | 1224 | | | | 2 |
| 209 | 131567 | | | | | | | | 209 | | | | 72293 | | | | | 213849 | | | | 29547 | | 68525 | 1224 | | | | 2 |
| 72293 | 131567 | | | | | | | | | | | | 72293 | | | | | 213849 | | | | 29547 | | 68525 | 1224 | | | | 2 |
| 213849 | 131567 | | | | | | | | | | | | | | | | | 213849 | | | | 29547 | | 68525 | 1224 | | | | 2 |
| 29547 | 131567 | | | | | | | | | | | | | | | | | | | | | 29547 | | 68525 | 1224 | | | | 2 |
| 68525 | 131567 | | | | | | | | | | | | | | | | | | | | | | | 68525 | 1224 | | | | 2 |
| 1224 | 131567 | | | | | | | | | | | | | | | | | | | | | | | | 1224 | | | | 2 |
| 2 | 131567 | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2 |
| 131567 | 131567 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
然后,我可以将此输出结合到我的原始数据,并使用GROUP BY
列上的rank
列来计算摘要统计信息。
我的问题:
我怎样才能"展平"请问递归表结构如上所述,
我一直在阅读有关递归查询和CTE的内容,但我对Oracle(和SQL)并不熟悉,所以我还不确定这是否真的是我想要的。特别是,不同的tax_ids
具有不同的等级信息是否重要(即并非所有的分类群都具有所有29个等级的条目,如上例所示)?
任何SQL提示都会受到高度赞赏,甚至知道递归查询是否是正确或错误的跟进都会非常有用!
谢谢!