SPARQL/錯誤的聚合函式
外觀
< SPARQL
在使用GROUP BY時,編碼錯誤可能會出現錯誤的聚合函式。有關GROUP BY的描述,請參閱修飾符章節。
錯誤“錯誤的聚合函式”沒有具體說明錯誤是什麼,因此本解釋將幫助您找出原因。
這是一個正確的示例。此示例列出了巴赫的孩子,並按他們的母親分組
SELECT ?mother ?motherLabel (COUNT(?child) AS ?children)
(GROUP_CONCAT(DISTINCT ?childLabel; SEPARATOR=", ") AS ?names)
WHERE
{
?child wdt:P22 wd:Q1339.# ?child has father Bach
?child wdt:P25 ?mother.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
?mother rdfs:label ?motherLabel.
?child rdfs:label ?childLabel.
}
}
GROUP BY ?mother ?motherLabel
第一個條件是分組變數應該匹配。
- 在
SELECT中,分組是按兩個變數?mother和?motherLabel進行的。 - 在
GROUP BY中,應該列出相同的變數?mother?motherLabel。
自己嘗試一下,看看使用GROUP BY ?mother會發生什麼。
在錯誤列表的底部,您可能會找到文字“選擇表示式中的非聚合變數: motherLabel”。
如果完全省略GROUP BY,則錯誤訊息類似“選擇表示式中的非聚合變數: mother”。
第二個條件是SELECT中的其餘變數應該每個都只產生一個值。
- 您需要使用能產生一個值的表示式,例如
COUNT或其他聚合函式MIN、MAX、SUM或AVG。 - 您也可以使用
GROUP_CONCAT將所有值列在一個變數中,例如將所有?childLabel的值列入?names。 - 所有變數都應該使用上述表示式進行轉換,即使一個變數只有一個值。
自己嘗試一下,看看在SELECT程式碼的其餘部分進行更改會發生什麼。
例如,如果您使用?childLabel,您可能會在錯誤列表的底部找到文字“選擇表示式中的非聚合變數: childLabel”。
錯誤訊息始終是“選擇表示式中的非聚合變數: xxxxx”,無論是GROUP BY中缺少變數,還是SELECT子句中未聚合的變數。