2016-10-07 76 views
1

我是sparql的新手,試圖找出什麼是最佳方式來選擇另一個查詢的計數器的最大值,而不用創建一個新表,只使用子查詢。我正在研究一個相對較小的數據集,因此計算時間不成問題。SPARQL選擇計數器的最大值

SELECT ?p1 ?c1 (MAX(?cnt1) AS ?maxc) 
WHERE{ 
{ 
SELECT ?p1 ?c1 (COUNT(?s1) AS ?cnt1) 
WHERE { 
    ?s1 ?p1 ?o1; 
      a ?c1. 
    }Group by ?p1 ?c1 
#ORDER BY ?p1 DESC(?cnt1) 
} 

}GROUP BY ?p1 

,所以我希望得到一個行,並與最大?P1的每一個值?CNT1合適?C1

我肯定是這樣做的方式,但由於某種它導致我的端點崩潰的原因。內部查詢可以正常工作,並且在同時分組?p1和 ?c1時,它只產生一行,最大值爲空。

感謝, 歐米

+1

什麼意思是「崩潰」,你使用哪個三重存儲? – AKSW

+1

像AKSW也表示:我們需要更多的細節。每當你有一個問題,基本上是「爲什麼這個查詢/代碼工作?」您需要提供相關信息來重現問題。數據集,預期結果,您正在使用的數據庫等。嘗試創建[mcve]。 –

回答

1

您的查詢就會崩潰,除非你是兩者兼而有之?P1和△C1分組。 分組時,出現在SELECT中的所有變量必須出現在GROUP中或聚合函數(MAX,COUNT等)中。

以下查詢會給你的計數器的最大值,但沒有相應的?p1?c1。要有這些,你可能需要一個帶有FILTER的子查詢...

SELECT (MAX(?cnt1) AS ?maxc) 
WHERE{ 
{ 
SELECT ?p1 ?c1 (COUNT(?s1) AS ?cnt1) 
WHERE { 
    ?s1 ?p1 ?o1; 
      a ?c1. 
    }Group by ?p1 ?c1 
} 
}