diff --git a/asterix-doc/src/site/markdown/aql/functions.md b/asterix-doc/src/site/markdown/aql/functions.md
index 1cda336..3b669d2 100644
--- a/asterix-doc/src/site/markdown/aql/functions.md
+++ b/asterix-doc/src/site/markdown/aql/functions.md
@@ -534,6 +534,95 @@
         " the voice-command is bad:("
         " the voicemail-service is awesome"
 
+## Aggregate Functions ##
+### count ###
+ * Syntax:
+ 
+        count(list)
+        
+ * Gets the number of items in the given list.
+ * Arguments:
+    * `list`: An `orderedList` or `unorderedList` containing the items to be counted, or a `null` value.
+ * Return Value:
+    * An `int64` value representing the number of items in the given list. `0i64` is returned if the input is `null`.
+    
+ * Example:
+ 
+        use dataverse TinySocial;
+
+        let $l1 := ['hello', 'world', 1, 2, 3]
+        let $l2 := for $i in dataset TwitterUsers return $i
+        return {"count1": count($l1), "count2": count($l2)}
+
+ * The expected result is:
+ 
+        { "count1": 5i64, "count2": 4i64 }    
+        
+### avg ###
+ * Syntax:
+ 
+        avg(num_list)
+        
+ * Gets the average value of the items in the given list.
+ * Arguments:
+    * `num_list`: An `orderedList` or `unorderedList` containing numeric or null values, or a `null` value.
+ * Return Value:
+    * An `double` value representing the average of the numbers in the given list. `null` is returned if the input is `null`, or the input list contains `null`. Non-numeric types in the input list will cause an error.
+    
+ * Example:
+ 
+        use dataverse TinySocial;
+
+        let $l := for $i in dataset TwitterUsers return $i.friends_count
+        return {"avg_friend_count": avg($l)}
+
+ * The expected result is:
+ 
+        { "avg_friend_count": 191.5d }   
+
+### sum ###
+ * Syntax:
+ 
+        sum(num_list)
+        
+ * Gets the sum of the items in the given list.
+ * Arguments:
+    * `num_list`: An `orderedList` or `unorderedList` containing numeric or null values, or a `null` value.
+ * Return Value:
+    * An `double` value representing the sum of the numbers in the given list. `null` is returned if the input is `null`, or the input list contains `null`. Non-numeric types in the input list will cause an error.
+    
+ * Example:
+ 
+        use dataverse TinySocial;
+
+        let $l := for $i in dataset TwitterUsers return $i.friends_count
+        return {"sum_friend_count": sum($l)}
+
+ * The expected result is:
+ 
+        { "sum_friend_count": 766 }  
+        
+### min/max ###
+ * Syntax:
+ 
+        min(num_list), max(num_list)
+        
+ * Gets the min/max of numeric items in the given list.
+ * Arguments:
+    * `num_list`: An `orderedList` or `unorderedList` containing the items to be compared, or a `null` value.
+ * Return Value:
+    * The min/max value of the given list. The returning type is decided by the item containing the type with the highest order in the numeric type promotion order (`int8`-> `int16`->`int32`->`float`->`double`, `int32`->`int64`->`double`) among items. `null` is returned if the input is `null`, or the input list contains `null`. Non-numeric types in the input list will cause an error.
+    
+ * Example:
+ 
+        use dataverse TinySocial;
+
+        let $l := for $i in dataset TwitterUsers return $i. friends_count
+        return {"min_friend_count": min($l), "max_friend_count": max($l)}
+
+ * The expected result is:
+ 
+        { "min_friend_count": 18, "max_friend_count": 445 }    
 
 ## Spatial Functions ##
 ### create-point ###
@@ -1933,3 +2022,28 @@
  * The expected result is:
 
         { "start": date("1984-01-01"), "end": date("1985-01-01") }
+
+## Other Functions ##
+
+### is-null ###
+ * Syntax:
+
+        is-null(var)
+
+ * Checks whether the given variable is a `null` value.
+ * Arguments:
+    * `var` : A variable (any type is allowed).
+ * Return Value:
+    * A `boolean` on whether the variable is a `null` or not.
+
+ * Example:
+
+        for $m in ['hello', 'world', null]
+        where not(is-null($m))
+        return $m
+
+
+ * The expected result is:
+
+        "hello"
+        "world"
\ No newline at end of file
