Add new min(), max(), and count_distinct() aggregation functions.
diff --git a/render.js b/render.js
index 427f4ec..1c0d51a 100644
--- a/render.js
+++ b/render.js
@@ -240,6 +240,26 @@
}
},
+ min: function(l) {
+ var out = null;
+ for (var i in l) {
+ if (out == null || l[i] < out) {
+ out = l[i];
+ }
+ }
+ return out;
+ },
+
+ max: function(l) {
+ var out = null;
+ for (var i in l) {
+ if (out == null || l[i] > out) {
+ out = l[i];
+ }
+ }
+ return out;
+ },
+
cat: function(l) {
return l.join(' ');
},
@@ -247,6 +267,18 @@
count: function(l) {
return l.length;
},
+
+ count_distinct: function(l) {
+ var a = {};
+ for (var i in l) {
+ a[l[i]] = 1;
+ }
+ var acc = 0;
+ for (var i in a) {
+ acc += 1;
+ }
+ return acc;
+ },
sum: function(l) {
var acc;
@@ -271,6 +303,9 @@
var field, func;
if (g) {
func = agg_funcs[g[1]];
+ if (!func) {
+ throw new Error('unknown aggregation function "' + g[1] + '"');
+ }
field = g[2];
} else {
func = null;