# Miscellaneous Information

This section lists the supported aggregate functions, data types and reserved words in Sclera' SQL.

## Aggregate Functions◄

The aggregate functions supported in Sclera can be order-insensitive, which apply to both ordered and unordered data, or order-sensitive, which apply only to ordered data.

### Order-Insensitive Aggregate Functions◄

These functions can be used in standard SQL aggregates as well as in running aggregates on ordered data (table adapted from PostgreSQL documentation):

Aggregate | Argument Type | Return Type | Description |
---|---|---|---|

`avg(expression)` |
any numeric type | `FLOAT` |
the average (arithmetic mean) of all input values |

`bool_and(expression)` |
`BOOLEAN` |
`BOOLEAN` |
true if all input values are true, otherwise false |

`bool_or(expression)` |
`BOOLEAN` |
`BOOLEAN` |
true if at least one input value is true, otherwise false |

`count(*)` |
`BIGINT` |
number of input rows | |

`count(expression)` |
any type | `BIGINT` |
number of input rows for which the value of expression is not null |

`every(expression)` |
`BOOLEAN` |
`BOOLEAN` |
equivalent to bool_and |

`max(expression)` |
any numeric, string, or date/time type | same as argument type | maximum value of expression across all input values |

`min(expression)` |
any numeric, string, or date/time type | same as argument type | minimum value of expression across all input values |

`sum(expression)` |
any numeric type | `BIGINT` for `SMALLINT` or `INTEGER` arguments, `FLOAT` for floating-point arguments |
sum of expression across all input values |

`corr(Y, X)` |
any numeric type | `FLOAT` |
correlation coefficient |

`covar_pop(Y, X)` |
any numeric type | `FLOAT` |
population covariance |

`covar_samp(Y, X)` |
any numeric type | `FLOAT` |
sample covariance |

`regr_avgx(Y, X)` |
any numeric type | `FLOAT` |
average of the independent variable `(sum(X)/N)` |

`regr_avgy(Y, X)` |
any numeric type | `FLOAT` |
average of the dependent variable `(sum(Y)/N)` |

`regr_count(Y, X)` |
any numeric type | `BIGINT` |
number of input rows in which both expressions are nonnull |

`regr_intercept(Y, X)` |
any numeric type | `FLOAT` |
y-intercept of the least-squares-fit linear equation determined by the `(X, Y)` pairs |

`regr_r2(Y, X)` |
any numeric type | `FLOAT` |
the coefficient of determination (also called R-squared or goodness of fit) |

`regr_slope(Y, X)` |
any numeric type | `FLOAT` |
slope of the least-squares-fit linear equation determined by the `(X, Y)` pairs |

`regr_sxx(Y, X)` |
any numeric type | `FLOAT` |
`sum(X^2) - sum(X)^2/N` ("sum of squares" of the independent variable) |

`regr_sxy(Y, X)` |
any numeric type | `FLOAT` |
`sum(X*Y) - sum(X)*sum(Y)/N` ("sum of products" of independent times dependent variable) |

`regr_syy(Y, X)` |
any numeric type | `FLOAT` |
`sum(Y^2) - sum(Y)^2/N` ("sum of squares" of the dependent variable) |

`stddev(expression)` |
any numeric type | `FLOAT` |
historical alias for stddev_samp |

`stddev_pop(expression)` |
any numeric type | `FLOAT` |
population standard deviation of the input values |

`stddev_samp(expression)` |
any numeric type | `FLOAT` |
sample standard deviation of the input values |

`variance(expression)` |
any numeric type | `FLOAT` |
historical alias for var_samp |

`var_pop(expression)` |
any numeric type | `FLOAT` |
population variance of the input values (square of the population standard deviation) |

`var_samp(expression)` |
any numeric type | `FLOAT` |
sample variance of the input values (square of the sample standard deviation) |

### Order-Sensitive Aggregate Functions◄

These functions can only be used in running aggregates on ordered data (table adapted from PostgreSQL documentation):

Function | Return Type | Description |
---|---|---|

`row_number()` |
`BIGINT` |
number of the current row within its partition, counting from 1 |

`rank()` |
`BIGINT` |
rank of the current row with gaps; same as row_number of its first peer |

`dense_rank()` |
`BIGINT` |
rank of the current row without gaps; this function counts peer groups |

`percent_rank()` |
`FLOAT` |
relative rank of the current row: `(rank - 1) / (total rows - 1)` |

`cume_dist()` |
`FLOAT` |
relative rank of the current row: (number of rows preceding or peer with current row) / (total rows) |

`ntile(num_buckets INTEGER)` |
`INTEGER` |
integer ranging from 1 to the argument value, dividing the partition as equally as possible |

`lag(value ANY [, offset INTEGER [, default ANY ]])` |
same type as value | returns value evaluated at the row that is offset rows before the current row within the partition; if there is no such row, instead return default. Both offset and default are evaluated with respect to the current row. If omitted, offset defaults to 1 and default to null |

`first_value(value ANY)` |
same type as value | returns value evaluated at the row that is the first row of the window frame |

`last_value(value ANY)` |
same type as value | returns value evaluated at the row that is the last row of the window frame |

`nth_value(value ANY, nth INTEGER)` |
same type as value | returns value evaluated at the row that is the nth row of the window frame (counting from 1); null if no such row |

`string_agg(expression ANY, delimiter VARCHAR)` |
`CHAR(n)` |
input values concatenated into a string, separated by delimiter |

## Data Types◄

Sclera supports a subset of PostgreSQL data types:

`BIGINT`

, `BOOL`

or `BOOLEAN`

, `CHAR(n)`

, `CHAR`

, `DATE`

, `DECIMAL(prec)`

, `DECIMAL(prec, scale)`

, `DECIMAL`

, `FLOAT(prec)`

, `FLOAT`

, `INT`

or `INTEGER`

, `NUMERIC(prec)`

, `NUMERIC(prec, scale)`

, `NUMERIC`

, `REAL`

, `SMALLINT`

, `TEXT`

, `TIMESTAMP`

, `TIME`

, `VARCHAR(n)`

, `VARCHAR`

.

Note that `ARRAY`

and other composite data types are not supported.

## Reserved Keywords◄

The following cannot be used as a name or alias of any object within a SQL command:

`ADD`

, `ALL`

, `ALTER`

, `AND`

, `ANY`

, `ARG`

, `AS`

, `ASC`

, `ASSOCIATOR`

, `BETWEEN`

, `BIGINT`

, `BIT`

, `BOOL`

, `BOOLEAN`

, `BPCHAR`

, `BY`

, `CASE`

, `CAST`

, `CHAR`

, `CLASSIFIED`

, `CLASSIFIER`

, `CLUSTERED`

, `CLUSTERER`

, `COLUMN`

, `CONNECTED`

, `CREATE`

, `CROSS`

, `DATE`

, `DAY`

, `DECIMAL`

, `DELETE`

, `DESC`

, `DISTINCT`

, `DROP`

, `ELSE`

, `END`

, `ESCAPE`

, `EXCEPT`

, `EXISTS`

, `EXTERNAL`

, `FALSE`

, `FETCH`

, `FIRST`

, `FLAG`

, `FLOAT`

, `FOREIGN`

, `FROM`

, `FULL`

, `GRAPH`

, `GROUP`

, `HAVING`

, `HOUR`

, `ILIKE`

, `IMPUTED`

, `IN`

, `INNER`

, `INSERT`

, `INT`

, `INTEGER`

, `INTERSECT`

, `INTERVAL`

, `INTO`

, `IS`

, `ISNULL`

, `JOIN`

, `KEY`

, `LABEL`

, `LAST`

, `LEFT`

, `LIKE`

, `LIMIT`

, `LOCATION`

, `MATCH`

, `MINUTE`

, `MONTH`

, `NATURAL`

, `NEXT`

, `NOT`

, `NOTNULL`

, `NULL`

, `NULLS`

, `NUMERIC`

, `OF`

, `OFFSET`

, `ON`

, `ONLY`

, `OR`

, `ORDER`

, `ORDERED`

, `OUTER`

, `OVER`

, `PARTITION`

, `PIVOT`

, `PREDICTOR`

, `PRIMARY`

, `READONLY`

, `REAL`

, `REFERENCES`

, `REMOVE`

, `RIGHT`

, `ROW`

, `ROWS`

, `SCHEMA`

, `SECOND`

, `SELECT`

, `SET`

, `SIMILAR`

, `SMALLINT`

, `SOME`

, `SYMMETRIC`

, `TABLE`

, `TEMP`

, `TEMPORARY`

, `TEXT`

, `THEN`

, `TIME`

, `TIMESTAMP`

, `TO`

, `TRUE`

, `UNION`

, `UNKNOWN`

, `UPDATE`

, `USING`

, `VALUES`

, `VARBIT`

, `VARCHAR`

, `VARCHAR2`

, `VARYING`

, `VIEW`

, `WHEN`

, `WHERE`

, `WITH`

, `WITHOUT`

, `YEAR`

, `ZONE`

.