@@ -9703,16 +9703,25 @@ <h5>Sum</h5>
9703
9703
be 6.0 (float).</p>
9704
9704
<div class="defn">
9705
9705
<p><b>Definition: <span id="defn_aggSum">Sum</span></b></p>
9706
- <pre class="code nohighlight">numeric Sum(sequence S)</pre>
9707
- <p>L = Flatten(S)</p>
9708
- <p>Sum(S) = Sum(L)</p>
9709
- <p>Sum(L) = op:numeric-add(L<sub>1</sub>, Sum(L<sub>2..n</sub>)) if <a href="#defn_Card">Card</a>(L) >
9710
- 1<br>
9711
- Sum(L) = op:numeric-add(L<sub>1</sub>, 0) if <a href="#defn_Card">Card</a>(L) = 1<br>
9712
- Sum(L) = "0"^^xsd:integer if <a href="#defn_Card">Card</a>(L) = 0</p>
9713
- <p>In this way, Sum( (1, 2, 3) ) = op:numeric-add(1, op:numeric-add(2,
9714
- op:numeric-add(3, 0))).</p>
9706
+ <pre class="code nohighlight">numeric <var>Sum</var>(sequence <var>S</var>)</pre>
9707
+ <p><var>Sum</var>(<var>S</var>) = <var>SumList</var>(<var>L</var>),</p>
9708
+ <p>where <var>L</var> = Flatten(<var>S</var>) and
9709
+ <var>SumList</var>(<var>L</var>) is defined recursively as follows.</p>
9710
+ <ul>
9711
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9712
+ <var>SumList</var>(<var>L</var>) = "0"^^<code>xsd:integer</code>.</li>
9713
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 1, then
9714
+ <var>SumList</var>(<var>L</var>) = <a data-cite="XPATH-FUNCTIONS-31#func-numeric-add">op:numeric-add</a>(<var>L</var><sub>1</sub>, 0).</li>
9715
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 1, then
9716
+ <var>SumList</var>(<var>L</var>) = <a data-cite="XPATH-FUNCTIONS-31#func-numeric-add">op:numeric-add</a>(<var>L</var><sub>1</sub>,
9717
+ <var>SumList</var>(<var>L</var><sub>2..n</sub>)).</li>
9718
+ </ul>
9719
+ <p>Note that <var>L</var><sub>1</sub> is the first element in
9720
+ <var>L</var>, and <var>L</var><sub>2..n</sub> is <var>L</var>
9721
+ without its first element.</p>
9715
9722
</div>
9723
+ <p>In this way, <var>Sum</var>( [(1), (2), (3)] ) = <var>SumList</var>( (1, 2, 3) ) =
9724
+ op:numeric-add(1, op:numeric-add(2, op:numeric-add(3, 0))).</p>
9716
9725
</section>
9717
9726
<section id="aggAvg">
9718
9727
<h5>Avg</h5>
@@ -9734,12 +9743,19 @@ <h5>Min</h5>
9734
9743
arbitrarily typed expressions.</p>
9735
9744
<div class="defn">
9736
9745
<p><b>Definition: <span id="defn_aggMin">Min</span></b></p>
9737
- <pre class="code nohighlight">term Min(sequence S)</pre>
9738
- <p>L = Flatten(S)</p>
9739
- <p>Min(S) = Min(L)</p>
9740
- <p>The flattened list L of values is ordered as per the <code>ORDER BY ASC</code> clause.</p>
9741
- <p>Min(L) = L<sub>1</sub> if <a href="#defn_Card">Card</a>(L) > 0<br>
9742
- Min(L) = error if <a href="#defn_Card">Card</a>(L) = 0</p>
9746
+ <pre class="code nohighlight">term <var>Min</var>(sequence <var>S</var>)</pre>
9747
+ <p><var>Min</var>(<var>S</var>) = <var>MinList</var>(<var>L</var>),</p>
9748
+ <p>where <var>L</var> is the list of values obtained by Flatten(<var>S</var>)
9749
+ and then ordered as per the <code>ORDER BY ASC</code> clause,
9750
+ and <var>MinList</var>(<var>L</var>) is defined as follows.</p>
9751
+ <ul>
9752
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9753
+ <var>MinList</var>(<var>L</var>) = error.</li>
9754
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 0, then
9755
+ <var>MinList</var>(<var>L</var>) = <var>L</var><sub>1</sub>,
9756
+ where <var>L</var><sub>1</sub> is the first element in
9757
+ <var>L</var>.</li>
9758
+ </ul>
9743
9759
</div>
9744
9760
</section>
9745
9761
<section id="aggMax">
@@ -9750,12 +9766,19 @@ <h5>Max</h5>
9750
9766
arbitrarily typed expressions.</p>
9751
9767
<div class="defn">
9752
9768
<p><b>Definition: <span id="defn_aggMax">Max</span></b></p>
9753
- <pre class="code nohighlight">term Max(sequence S)</pre>
9754
- <p>L = Flatten(S)</p>
9755
- <p>Max(S) = Max(L)</p>
9756
- <p>The flattened list L of values is ordered as per the <code>ORDER BY DESC</code> clause.</p>
9757
- <p>Max(L) = L<sub>1</sub> if <a href="#defn_Card">Card</a>(L) > 0<br>
9758
- Max(L) = error if <a href="#defn_Card">Card</a>(L) = 0</p>
9769
+ <pre class="code nohighlight">term <var>Max</var>(sequence <var>S</var>)</pre>
9770
+ <p><var>Max</var>(<var>S</var>) = <var>MaxList</var>(<var>L</var>),</p>
9771
+ <p>where <var>L</var> is the list of values obtained by Flatten(<var>S</var>)
9772
+ and then ordered as per the <code>ORDER BY DESC</code> clause,
9773
+ and <var>MaxList</var>(<var>L</var>) is defined as follows.</p>
9774
+ <ul>
9775
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9776
+ <var>MaxList</var>(<var>L</var>) = error.</li>
9777
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 0, then
9778
+ <var>MaxList</var>(<var>L</var>) = <var>L</var><sub>1</sub>,
9779
+ where <var>L</var><sub>1</sub> is the first element in
9780
+ <var>L</var>.</li>
9781
+ </ul>
9759
9782
</div>
9760
9783
</section>
9761
9784
<section id="aggGroupConcat">
@@ -9766,20 +9789,38 @@ <h5>GroupConcat</h5>
9766
9789
SEPARATOR.</p>
9767
9790
<div class="defn">
9768
9791
<p><b>Definition: <span id="defn_aggGroupConcat">GroupConcat</span></b></p>
9769
- <pre class="code nohighlight">literal GroupConcat(sequence S, function scalarvals)</pre>
9770
- <p>If the scalarvals argument is absent from GROUP_CONCAT, then scalarvals is taken to
9771
- be the empty function.</p>
9772
- <p>|separator| = scalarvals("separator") if scalarvals is defined for the argument "separator"</p>
9773
- <p>|separator| = the "space" character, unicode codepoint U+0020, if scalarvals is undefined for the argument "separator"</p>
9774
- <p>L = Flatten(S)</p>
9775
- <p>GroupConcat(S, scalarvals) = GroupConcat(L, |separator|)</p>
9776
- <p>GroupConcat(L, sep) = "" if <a href="#defn_Card">Card</a>(L) = 0</p>
9777
- <p>GroupConcat(L, sep) = CONCAT("", L<sub>1</sub>) if
9778
- <a href="#defn_Card">Card</a>(L) = 1</p>
9779
- <p>GroupConcat(L, sep) = CONCAT(L<sub>1</sub>, sep, GroupConcat(L<sub>2..n</sub>,
9780
- sep)) if <a href="#defn_Card">Card</a>(L) > 1</p>
9781
- </div>
9782
- <p>For example, GroupConcat([("a"), ("b"), ("c")], {"separator" → "."}) = "a.b.c".</p>
9792
+ <pre class="code nohighlight">literal <var>GroupConcat</var>(sequence <var>S</var>, function <var>scalarvals</var>)</pre>
9793
+ <p>If the <var>scalarvals</var> argument is absent from <code>GROUP_CONCAT</code>,
9794
+ then <var>scalarvals</var> is taken to be the empty function.</p>
9795
+ <p>Let <var>sep</var> be a string that is defined as follows.</p>
9796
+ <ul>
9797
+ <li>If <var>scalarvals</var> is defined for the argument "separator",
9798
+ then <var>sep</var> = <var>scalarvals</var>("separator").</li>
9799
+ <li>If <var>scalarvals</var> is undefined for the argument "separator",
9800
+ then <var>sep</var> is the "space" character (i.e., unicode codepoint U+0020).</li>
9801
+ </ul>
9802
+ <p><var>GroupConcat</var>(<var>S</var>, <var>scalarvals</var>) =
9803
+ <var>GCList</var>(<var>L</var>, <var>sep</var>),</p>
9804
+ <p>where <var>L</var> = Flatten(<var>S</var>) and
9805
+ <var>GCList</var>(<var>L</var>, <var>sep</var>)
9806
+ is defined recursively as follows.</p>
9807
+ <ul>
9808
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9809
+ <var>GCList</var>(<var>L</var>, <var>sep</var>) = "".</li>
9810
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 1, then
9811
+ <var>GCList</var>(<var>L</var>, <var>sep</var>) =
9812
+ <a href="#func-concat"><code>CONCAT</code></a>("", <var>L</var><sub>1</sub>).</li>
9813
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 1, then
9814
+ <var>GCList</var>(<var>L</var>, <var>sep</var>) =
9815
+ <a href="#func-concat"><code>CONCAT</code></a>(<var>L</var><sub>1</sub>, <var>sep</var>, <var>GCList</var>(<var>L</var><sub>2..n</sub>, <var>sep</var>)).</li>
9816
+ </ul>
9817
+ <p>Note that <var>L</var><sub>1</sub> is the first element in
9818
+ <var>L</var>, and <var>L</var><sub>2..n</sub> is <var>L</var>
9819
+ without its first element.</p>
9820
+ </div>
9821
+ <p>For example, <var>GroupConcat</var>([("a"), ("b"), ("c")], {"separator" → "."})
9822
+ = <var>GCList</var>( ("a", "b", "c"), "." )
9823
+ = "a.b.c".</p>
9783
9824
</section>
9784
9825
<section id="aggSample">
9785
9826
<h5>Sample</h5>
0 commit comments