Daten verdichten
COUNT, GROUP BY und HAVING in SPARQL
Aggregate fassen Lösungen zusammen; GROUP BY definiert Gruppen und HAVING filtert aggregierte Ergebnisse.
Gruppen vor dem Aggregat festlegen
GROUP BY teilt Lösungszeilen nach Schlüsselvariablen. Aggregate wie COUNT oder AVG werden pro Gruppe berechnet. Jede nicht aggregierte projizierte Variable muss zur Gruppierung passen.
Ein Join kann dasselbe Produkt mehrfach erzeugen. COUNT(DISTINCT ?produkt) zählt eindeutige Produkte, kann aber eine falsche Joinlogik nur verdecken.
HAVING filtert Gruppen
WHERE filtert einzelne Lösungen vor der Gruppierung. HAVING prüft Bedingungen auf dem aggregierten Gruppenergebnis.
Wer nur Kategorien mit mindestens zehn Produkten sucht, formuliert diese Schwelle deshalb mit HAVING.
Leere Gruppen und Datentypen
Kategorien ohne Treffer entstehen nicht automatisch als leere Gruppe. Sie müssen von der Kategorie ausgehend mit OPTIONAL eingebracht werden, wenn Nullwerte erscheinen sollen.
AVG erwartet numerisch kompatible Werte. Inkonsistente Datentypen sollten vor der Kennzahl bereinigt oder sichtbar ausgewiesen werden.
Produktzahl und Durchschnittspreis je Kategorie
Die Abfrage zählt eindeutige Produkte und zeigt nur Kategorien mit mindestens zehn Produkten.
PREFIX schema: <https://schema.org/>
SELECT ?kategorie
(COUNT(DISTINCT ?produkt) AS ?anzahl)
(AVG(?preis) AS ?durchschnitt)
WHERE {
?produkt a schema:Product ;
schema:category ?kategorie ;
schema:offers/schema:price ?preis .
}
GROUP BY ?kategorie
HAVING(COUNT(DISTINCT ?produkt) >= 10)
ORDER BY DESC(?anzahl)Eigenständige Beispielabfrage für diese Intention. Endpunktfunktionen und Datensatz müssen vor Produktion separat geprüft werden.
Prüffrage für die Praxis
Prüfe vor dem Zählen, ob Joins Duplikate erzeugen.
Quellen zu diesem Beitrag
Auswahl auf Artikelebene, geprüft am 18.09.2026.
- W3C SPARQL 1.2 Query, Aggregates
Definiert COUNT, AVG und weitere Aggregate. - W3C SPARQL 1.2 Query, GROUP BY
Definiert Gruppierung und HAVING.