Kapitel 5.6 · Gruppierung & Aggregation

Mehrfachgruppierung

Seite 57 von 114 1 Min. Lesezeit

Das Prinzip der Mehrfachgruppierung wird dann eingesetzt, wenn innerhalb einer einzelnen Anfrage der Originaldatenbestand mehrfach nach unterschiedlichen Kriterien gruppiert werden soll. Mehrfachgruppierung steht dabei im Gegensatz zu einer (einmaligen) Gruppierung über mehrere Attribute. Im laufenden Beispiel soll das Durchschnittsalter sowohl nach Geschlecht als auch nach Berufsgruppe mit folgendem Ergebnis berechnet werden:

<MedizinischesPersonal>
  <MedizinischesPersonal_nach_Beruf>
    <Berufsgruppe>
      <Beruf>Arzt</Beruf>
      <Alter>28</Alter>
    </Berufsgruppe>
    <Berufsgruppe>
      <Beruf>Pfleger</Beruf>
      <Alter>53</Alter>
    </Berufsgruppe>
  </MedizinischesPersonal_nach_Beruf>
  <MedizinischesPersonal_nach_Geschlecht>
    <Geschlechtsgruppe>
      <Geschlecht>m</Geschlecht>
      <Alter>28</Alter>
    </Geschlechtsgruppe>
    <Geschlechtsgruppe>
      <Geschlecht>w</Geschlecht>
      <Alter>53</Alter>
    </Geschlechtsgruppe>
  </MedizinischesPersonal_nach_Geschlecht>
</MedizinischesPersonal>

Die dazu korrespondierende XQuery ergibt sich mit zwei hintereinander liegenden FLWOR-Blöcken wie folgt:

<MedizinischesPersonal>
  <MedizinischesPersonal_nach_Beruf>
    {
      for $b in fn:distinct-values(
        for $i in fn:doc("...")//MedizinischesPersonal/*/*
        return fn:name($i))
      let $x := fn:doc("...")//*[fn:name(.) = $b]/Alter
      return <Berufsgruppe>
        <Beruf>{ $b }</Beruf>
        <Alter>{ fn:avg($x) }</Alter>
      </Berufsgruppe>
    }
  </MedizinischesPersonal_nach_Beruf>
  <MedizinischesPersonal_nach_Geschlecht>
    {
      for $g in fn:distinct-values(fn:doc("...")//Geschlecht)
      let $x := fn:doc("...")//*[Geschlecht=$g]/Alter
      return <Geschlechtsgruppe>
        <Geschlecht>{ $g }</Geschlecht>
        <Alter>{ fn:avg($x) }</Alter>
      </Geschlechtsgruppe>
    }
  </MedizinischesPersonal_nach_Geschlecht>
</MedizinischesPersonal>

Weisen zwei Gruppierungskombinationen gleiche Gruppierungseigenschaften auf, so kann die Gemeinsamkeit dahingehend ausgenützt werden, dass nur eine einzige Variable definiert werden muss und gemeinsam genutzt werden kann.