PostgreSQL圖(graph)的遞歸查詢實例_PostgreSQL

來源:腳本之家  責任編輯:小易  

莫桑鉆gra證書和gia證書區別如下:一、GIA是非營利機構,經費由珠寶業界人士捐獻。二、GIA主要服百務范圍在珠寶鑒定及專業知識的教育與研究,深受全球珠寶業的認度同;GRA就是中國人冒充GIA的自己印的證書,沒有一點用處,批發1元一本,有多少有多少。三、GIA于1931年由專Robert M.Shipley創立,GIA是把鉆石鑒定證書推廣成為國際化的創始者,GIA又把莫桑石譽為寶石,并把莫桑石譽為是世界上最璀璨的寶石;GRA則是屬目前無處可以考證,證實其權威性的一個機構www.anxorj.tw防采集請勿采集本網。

背景

樹形遞歸查詢這篇文章,我記錄了使用CTE語法查詢樹形結構的辦法。在一個樹形結構中,每一個節點最多有一個上級,可以有任意個數的下級。

莫桑鉆里面帶的黑色卡,上面標的這個是含量的問題

在實際場景中,我們還會遇到對圖(graph)的查詢,圖和樹的最大區別是,圖的節點可以有任意個數的上級和下級。如下圖所示

你說的是莫桑鉆GRA證書,黑卡吧?這個怎么說呢,你會問出這個問題說明你珠寶知識還不夠豐富。GRA有網站,但我看過GRA的網站,幾乎與GIA網站一模一樣。什么是GIA呢?GIA就是大名鼎鼎的美國寶石

因為圖可能存在loop結構(上圖紅色箭頭),所以在使用CTE遞歸的過程中,必須要破環(break loop),否則算法就會進入無限遞歸,永不結束。

搶戰斗機地點位于軍事基地,需要在路上搶一輛摩托車或者速度快一點的車子,從隧道邊上一個土坡上沖進去,進去之后直接開到機庫里邊,下車后要馬上搶飛機,時間長了機庫門口容易被堵住。搶到飛機

存儲和查詢圖結構,目前當紅數據庫是neo4j,但是當數據量只有十幾萬條的時候,PostgreSQL完全可以勝任。

這個質量還是挺不錯的,我去年給我女朋友買了一個還是挺好的。

構造樣本數據

美國莫桑鉆證書是GIA,GIA是最具權威性的證書,而國產則有GRA證書以及GTC、GRS、BIA等證書,并無權威性。GIA于1931年由Robert M.Shipley創立,GIA是把鉆石鑒定證書推廣成為國際化的創始者;GRA則

-- 每一條有向關系邊都存在上游,下游兩個節點drop table if exists demo.t_rel;create table if not exists demo.t_rel(up int , down int);-- 唯一約束,避免插入相同的關系alter table demo.t_rel add constraint udx_t_rel unique (up, down);insert into demo.t_rel values(6,5),(3,7),(5,1),(1,2),(5,2),(5,7),(7,2),(2,4),(7,4);-- 構造一條環數據,7-2-4-7delete from demo.t_rel where up=4 and down=7;insert into demo.t_rel values(4,7);

遞歸查詢

指定節點的下級

常見的一個場景是,給定一個節點,查詢這個節點的所有下級節點和路徑。使用破環的算法關鍵如下 使用數組保存當前的路徑信息。 計算下一個節點之前,判斷該節點是否已經存在于路徑上。如果是,就說明該點是環的起點,必須排除這個節點來達到破環的效果。 起始節點和最大深度,都是可選的。如果忽略這兩個條件,就會返回完整的圖信息。

with recursive downstream as(select 1 as lvl, r.up, r.down, -- 保存當前路徑array[]::int[] || r.up || r.down as trace from demo.t_rel r where r.up = 7 -- 指定起點union allselect ds.lvl +1, r.up, r.down, ds.trace || r.downfrom demo.t_rel r , downstream ds where r.up = ds.down-- 破環and not r.down = any(ds.trace)and ds.lvl < 20 -- 最大深度)select * from downstream ds;

上面以節點7為開始,返回下級的所有節點和路徑信息,如下。

-- 可以看到并沒有包括7-2-4-7這條環。 lvl | up | down | trace-----+----+------+--------- 1 | 7 | 2 | {7,2} 1 | 7 | 4 | {7,4} 2 | 2 | 4 | {7,2,4}(3 rows)

指定節點的所有關聯

在社交網絡的場景中,我們根據一個特定的節點,查詢所有的關系網。在本文的樣本數據中,我們的需求就變成,同時查詢指定節點的所有上級和下級。

為了方便后面的測試,我們封裝一個函數

drop function if exists f_get_rel;/*取得某個節點的相關聯節點,和路徑信息。@start_node 起始節點。@direct_flag 查詢方向,-1:查找上級;1:查找下級; 0:查找上下級;@max_depth 遞歸深度,即查找最多幾級關系。*/create or replace function f_get_rel(start_node int, direct_flag int=1, max_depth int=20) returns table (direct int, cur_depth int, up_node int, down_node int, trace int[])as $$beginreturn query with recursive downstream as(select 1 as lvl, r.up, r.down, array[]::int[] || r.up || r.down as trace from demo.t_rel r where r.up = start_nodeand direct_flag in (0, 1)union allselect ds.lvl +1, r.up, r.down, ds.trace || r.downfrom demo.t_rel r , downstream ds where r.up = ds.downand not r.down = any(ds.trace)and ds.lvl < max_depth),upstream as(select 1 as lvl, r.up, r.down, array[]::int[] || r.up || r.down as trace from demo.t_rel r where r.down = start_nodeand direct_flag in (0, -1)union allselect us.lvl +1, r.up, r.down, r.up || us.trace from demo.t_rel r , upstream us where r.down = us.upand not r.up = any(us.trace)and us.lvl < max_depth)select -1, us.* from upstream us union all select 1, ds.* from downstream dsorder by 1 desc, lvl, up, down;end;$$ language plpgsql strict;

測試一下,查詢節點7的所有3度關聯節點信息,如下

dap=# select * from demo.f_get_rel(7,0,3); direct | cur_depth | up_node | down_node | trace--------+-----------+---------+-----------+----------- 1 | 1 | 7 | 2 | {7,2} 1 | 1 | 7 | 4 | {7,4} 1 | 2 | 2 | 4 | {7,2,4} -1 | 1 | 3 | 7 | {3,7} -1 | 1 | 4 | 7 | {4,7} -1 | 1 | 5 | 7 | {5,7} -1 | 2 | 2 | 4 | {2,4,7} -1 | 2 | 6 | 5 | {6,5,7} -1 | 3 | 1 | 2 | {1,2,4,7} -1 | 3 | 5 | 2 | {5,2,4,7}(10 rows)

圖形顯示結果

ECharts模板

在沒有集成圖形界面之前,使用ECharts的示例代碼(地址),可以直觀的查看關系圖譜。對官方樣表進行微調之后,代碼如下

注意 代碼中的 data 和 links 部分需要進行替換

option = { title: { text: '數據圖譜' }, tooltip: {}, animationDurationUpdate: 1500, animationEasingUpdate: 'quinticInOut', series : [ { type: 'graph', layout: 'force', force: { repulsion: 1000 }, focusNodeAdjacency: true, symbolSize: 30, roam: true, label: { normal: { show: true } }, edgeSymbol: ['circle', 'arrow'], edgeSymbolSize: [4, 10], edgeLabel: { normal: { textStyle: { fontSize: 20 } } }, data: [ { name:"2", draggable: true, symbolSize:20}, ], links: [ { source:"2", target:"4"}, ], } ]};

造顯示用數據

構造 data 部分

-- 根據節點的關聯點數量,設置圖形大小with rel as (select * from f_get_rel(7,0,2)),up_nodes as (select up_node, count(distinct down_node) as out_cnt from rel group by up_node),down_nodes as (select down_node, count(distinct up_node) as in_cnt from rel group by down_node),node_cnt as ( select up_node as node, out_cnt as cnt from up_nodes union all select * from down_nodes )select '{ name:"' || n.node || '", draggable: true, symbolSize:' || sum(n.cnt) * 10 || '},' as nodefrom node_cnt ngroup by n.nodeorder by 1;

構造 links 部分

select distinct r.up_node, r.down_node, '{ source:"'|| r.up_node ||'", target:"'|| r.down_node ||'"},' as links from f_get_rel(7,0,3) rorder by r.up_node;

圖形顯示

把構造的data和links替換到ECharts代碼里面

查詢節點7的所有2度關聯節點信息,結果顯示如下

查詢節點7的所有關聯節點信息(不限層級數),結果顯示如下

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對真格學網的支持。

gra證書和gia證書區別如下:①GIA是非營利機構,經費由珠寶業界人士捐獻。②GIA主要服務范圍在珠寶鑒定及專業知識的教育與研究,深受全球珠寶業的認同;GRA研究的是莫桑石,而莫桑石是自然界中硬度次于鉆石,但價格僅為鉆石十分之一的一類珠寶。③GIA于1931年由Robert M.Shipley創立,GIA是把鉆石鑒定證書推廣成為國際化的創始者;GRA則是目前無處可以考證,證實其權威性的一個機構。擴展資料:GIA證書大體可分為五個部分,其閱讀說明如下:一、標題1.Gemological Institute America?:GIA實驗室的LOGO;2.GIA DIAMOND DOSSIER?:證書名稱;3.March 7 2005:開證書的日期。這個日期也代表了當時的檢測水平和美金價格。二、第一部分1.Laser Inscription Registry:激光印記《鐳射編號》。GIA 13945200刻在鉆石腰上的鐳射號碼,黑色,GIA三字為空心字母,編號與Report的編號一致,作為識別GIA鉆石身份的證明;2.Shape and Cutting Style:鉆石琢型。ROUND是圓鉆,知識可以參考《標準圓鉆明亮式切割》。其他形狀的鉆石有其特有的名稱,比如祖母綠切割 EMERALD CUT;3.Measurements:鉆石尺寸。4.44-4.48 x 2.76 mm,直徑(最小-最大)*高度 直徑允許是個范圍,單位是毫米;三、4C信息1.Carat Weight:鉆石重量。0.33 carat。Carat是鉆石重量單位,中文叫“克拉”。1克=5克拉,1克拉=100分。GIA計算到小數點后2位,第三位逢9進一,比如32.89算32分,32.9算33分;從投資角度看,重量在1克拉以上具備抗通脹,穩定升值的價值。2.Color Grade:鉆石顏色。G是本鉆顏色。寶石級白色鉆石是從D色開始到Z色的,知識可以參考《鉆石顏色分級》和《專家教你挑鉆石顏色》。另外粉紅等什么的顏色叫彩色鉆石,比如Fancy pink。彩鉆也有很多級別,以后會有文章詳細介紹。3.Clarity Grade:鉆石凈度。VVS2是本鉆凈度。也就是10倍放大鏡下鉆石的內涵物的多少。GIA將鉆石凈度分為FL、IF、VVS1-VVS2、VS1-VS2、SI1-SI2、I1-I2-I3等級別,從前到后依次降低,一般我們覺得佩帶的高性價比是VvS1-VvS2這一檔,收藏是IF這一檔比較合適,如果是戴著玩,那么SI的也可以,但是國內我們建議買SI的買國內證書,要少很多錢;知識可以參考《凈度等級》和《專家教你挑鉆石凈度》。4.Cut Grade:鉆石切工。這是新加的一個綜合評價,看4C的切工就看這個拉!其實是很多指標的綜合衡量,也包括對稱性和拋光性。Excellent是本鉆切工。知識可以參考《專家教你挑鉆石切工》《配合GIA數據庫看鉆石切工》四、附加信息1.Clarity Characteristics:包裹體。一些天然鉆石的內部特征,比如crystal小晶體、cloud云霧狀包裹體等,這些是在顯微鏡下才可以發現的內部特征,但也會影響光的折射進而影響鉆石的品質,此項用來證明鉆石的天然性;以便更好的檢驗其真假,嚴選其品質.2.Finish:修飾度。也就是鉆石切割完成后對鉆石美麗程度的修飾,生活化一點就是化妝做發型這樣的類型,比不上Cut切工這樣主身材的重要,但是如果修飾度好一些,也會增加鉆石的美感。修飾度分為2個方面:A、Polish:拋光。拋光會增加鉆石的亮度。但有一些鉆石有天然的特征,比如原始晶面等,是不能被拋光掉的。所以如果是這樣的天然情況,對拋光也不要太苛求。B、Symmetry:對稱性。對稱就是一顆鉆石左右切割得是否對稱,因為所有鉆石都有最大和最小的直徑,所有沒有一顆鉆石是完全對稱的。對稱性在GOOD以上就有可能會出現八心八箭效應,但并不代表八心八箭就是好切工,記住它僅僅是個特殊效應而已。3.Fluorescence:熒光。鉆石有熒光是自然現象,藍色的熒光可以增強鉆石的亮白度,黃色的熒光可以降低,所以帶熒光的鉆石也要看哪一種光,有熒光也無妨,也許會更讓鉆石更加漂亮。知識可以參考《關于熒光的說明》。五、切工標示圖證書的右下方,是鉆石的切割圖,首先我們看一下它的臺寬比,在國際標準范圍內是54.8%-64.8%,那么再看一下亭深比,在國際標準圍內是41.5%-45.0%,最后我們再看一下冠角度,在國際標準超過35℃稱為八心八箭,它是一種光學較差,也就是優質切工的一種,用專業儀器從上面觀看能看到8個箭頭。參考資料來源:百度百科-GIA證書內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • python連接postgresql過程解析
  • postgresql 按小時分表(含觸發器)的實現方式
  • postgresql 如何獲取當前日期時間及注意事項
  • python 兩個數據庫postgresql對比
  • 詳解centos7下postgresql 11的安裝和配置教程
  • sql腳本函數編寫postgresql數據庫實現解析
  • centos7使用yum安裝postgresql和postgis的方法
  • postgresql物化視圖(materialized view)過程解析
  • postgresql數據庫中跨庫訪問解決方案
  • linux centos 7安裝postgresql9.3圖文教程
  • windows下postgresql數據庫的下載與配置方法
  • phppgadmin 常見錯誤和問題的解決辦法
  • phppgadmin 配置文件參數說明中文版
  • postgresql使用ip無法連接的解決方法
  • 深入解讀postgresql中的序列及其相關函數的用法
  • pgsql查詢優化之模糊查詢實例詳解
  • postgresql樹形結構的遞歸查詢示例
  • postgresql教程(十一):服務器配置
  • gra gia證書區別
  • 莫桑鉆gra和gia證書,有什么區別?
  • 請問科學計算器中 DEG RAD GRA 各是什么意思
  • 高數中gra是什么意思
  • 莫桑鉆里面帶的黑色卡上面的GRA是什么?
  • GRA的證書和黑卡怎么驗真假呢?
  • 《GTA5》搶戰斗機方法圖文詳解 怎么搶戰斗機
  • GRA鉆戒質量如何?
  • 莫桑石gra證書是不是美國莫桑石才有的證書?
  • .GRA文件,怎么打開?
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁postgresqlpython連接postgresql過程解析postgresql 按小時分表(含觸發器)的實現方式postgresql 如何獲取當前日期時間及注意事項python 兩個數據庫postgresql對比詳解centos7下postgresql 11的安裝和配置教程sql腳本函數編寫postgresql數據庫實現解析centos7使用yum安裝postgresql和postgis的方法postgresql物化視圖(materialized view)過程解析postgresql數據庫中跨庫訪問解決方案linux centos 7安裝postgresql9.3圖文教程windows下postgresql數據庫的下載與配置方法phppgadmin 常見錯誤和問題的解決辦法phppgadmin 配置文件參數說明中文版postgresql使用ip無法連接的解決方法深入解讀postgresql中的序列及其相關函數的用法pgsql查詢優化之模糊查詢實例詳解postgresql樹形結構的遞歸查詢示例postgresql教程(十一):服務器配置postgresql 角色與用戶管理介紹windows下postgresql數據庫的下載windows下postgresql安裝圖解15個postgresql數據庫實用命令分postgresql中的oid和xid 說明windows postgresql 安裝圖文教程postgresql alter語句常用操作小postgresql 安裝和簡單使用postgresql 創建表分區postgresql新手入門教程postgresql分區表(partitioning)應用實postgresql中使用數組改進性能實例代碼postgresql教程(二十):pl/pgsql過程語言postgresql 查看數據庫,索引,表,表空間postgresql教程(十九):sql語言函數postgresql主從異步流復制方案的深入探究postgresql開啟遠程訪問的步驟全紀錄postgresql教程(二):模式schema詳解postgresql中使用dblink實現跨庫查詢的方15個postgresql數據庫實用命令分享
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载