• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Gruppenfilterung und Sortierung

Die Überprüfung auf Existenz eines Eintrags, über den es zu aggregieren gilt, um leere Gruppierungskombinationen zu eliminieren, entspricht im Wesentlichen dem Konstrukt der Gruppenfilterung (in SQL durch die HAVING-Klausel realisiert). Im Allgemeinen werden Filterbedingungen auf Gruppen in XQuery in der where-Klausel des entsprechenden FLWOR-Ausdrucks angegeben. Ist in dem laufenden Beispiel die Ausgabe auf die Gruppen einzuschränken, die mindestens drei Personen repräsentieren und deren Durchschnittsalter unterhalb von 50 Jahren liegen sollen, so kann dies durch Hinzunahme der entsprechenden where-Klausel realisiert werden:

<MedizinischesPersonal>
{
for $b in fn:distinct-values(
for $i in fn:doc("...")//MedizinischesPersonal/*/*
return fn:name($i)),
$g in fn:distinct-values(fn:doc("...")//Geschlecht)
let $x := fn:doc("...")//
[fn:name(.) = $b and Geschlecht=$g]/Alter
order by $g, fn:avg($x) descending
return
(<Berufsgruppe>{ $b }<Berufsgruppe>,
<Geschlecht>{ $g }</Geschlecht>,
<Alter>{ fn:avg($x) }</Alter>)
}
</MedizinischesPersonal>

Zusätzlich zur Filterung auf Gruppen kann eine explizite Sortierung auf alle direkten bzw. abgeleiteten Variablen bei der Formulierung einer Gruppierungsanfrage vorgenommen werden. In obigem Beispiel wird zunächst nach der Zugehörigkeit zu einem Geschlecht und daran anschließend nach dem Durchschnittsalter der jeweiligen Personen absteigend sortiert.

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>