SPARQL/聚合函式
外觀
< SPARQL
聚合函式與 修飾符 GROUP BY 結合使用。
可用的聚合函式有
COUNT:元素的數量。您也可以寫COUNT(*)來簡單地計算所有結果。SUM,AVG:分別為所有元素的總和或平均值。如果元素不是數字,您將獲得奇怪的結果。MIN,MAX:分別為所有元素的最小值或最大值。這對所有值型別都有效;數字按數值排序,字串和其他型別按詞典順序排序。SAMPLE:任何元素。如果您知道只有一個結果,或者您不關心返回哪一個,這偶爾會很有用。GROUP_CONCAT:連線所有元素。
請參閱 修飾符 GROUP BY 以獲取示例。
# The syntax is like this
SELECT ?group1 ?group2
(COUNT(?var1) AS ?var2)
(GROUP_CONCAT(DISTINCT ?var3; SEPARATOR=", ") AS ?var4)
WHERE
{
...
}
GROUP BY ?group1 ?group2
當使用標籤的聚合函式時,所有標籤都應在 SERVICE 中顯式定義。
此外,您可以在這些函式中新增 DISTINCT 修飾符來消除重複結果。例如,如果有兩個結果,但它們在 ?var 中具有相同的值,那麼 COUNT(?var) 將返回 2,但 COUNT(DISTINCT ?var) 僅返回 1。當您的查詢可以多次返回同一項時,您通常需要使用 DISTINCT——例如,如果您使用 ?item wdt:P31/wdt:P279* ?class,並且從 ?item 到 ?class 有多條路徑:您將為每條路徑獲得一個新結果,即使結果中的所有值都相同。(如果您不進行分組,您也可以透過以 SELECT DISTINCT 而不是 SELECT 開頭查詢來消除這些重複結果。)
聚合函式也可以與 HAVING 修飾符 結合使用。
例如,檢視此查詢以檢查機場的重複 IATA 程式碼
SELECT ?object (COUNT(?subject) AS ?count)
(MIN(?subject) AS ?subject1) (MAX(?subject) AS ?subject2)
(GROUP_CONCAT(DISTINCT ?subjectLabel; SEPARATOR=", ") AS ?subjectLabels)
WHERE
{
?subject wdt:P238 ?object. # IATA airport code
SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
?subject rdfs:label ?subjectLabel.
}
}
GROUP BY ?object
HAVING(COUNT(?subject) > 1)
ORDER BY ?object