============================ SQL Expressions ============================ ------------------------- Arithmetic Expressions ------------------------- ------------------------- Type Casts ------------------------- A type cast converts a specified-typed data to another-typed data. Tajo has two type cast syntax: .. code-block:: sql CAST ( expression AS type ) expression::type In addition, several functions are provided for type conversion. Please refer to :doc:`../functions/data_type_func_and_operators` and :doc:`../functions/datetime_func_and_operators`. ------------------------- String Literals ------------------------- A string constant is an arbitrary sequence of characters bounded by single quotes (``'``): .. code-block:: sql 'tajo' ------------------------- Function Calls ------------------------- The syntax for a function call consists of the name of a function and its argument list enclosed in parentheses: .. code-block:: sql function_name ([expression [, expression ... ]] ) For more information about functions, please refer to :doc:`../functions`. ------------------------- Window Function Calls ------------------------- A window function call performs aggregate operation across the ``window`` which is a set of rows that are related to the current row. An window function has the following syntax. .. code-block:: sql function_name OVER ( window_definition ) where *function_name* is the name of aggregation function. Any aggregation function or window function can be used. For built-in aggregation functions and window functions, please refer to :doc:`../functions/agg_func` and :doc:`../functions/window_func`. *window_definition* has the following syntax. .. code-block:: sql [ PARTITION BY expression [, ...] ] [ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ] In the above syntax, *expression* can be any expression except window function call itself. *PARTITION BY* and *ORDER BY* lists have the same syntax and semantics as *GROUP BY* and *ORDER BY* clauses. That is, *PARTITION BY* list describes how the output result will be partitioned like *GROUP BY* clause creates multiple partitions according to the value of its expression. With *ORDER BY* list, result values are sorted in each partition. Here are some examples. .. code-block:: sql select l_orderkey, count(*) as cnt, row_number() over (order by count(*) desc) row_num from lineitem group by l_orderkey order by l_orderkey; select o_custkey, o_orderstatus, sum(o_totalprice) over (partition by o_custkey) as price from orders; select l_linenumber, l_tax, sum(l_quantity) over (partition by l_linenumber order by l_tax desc) as quantity, avg(l_extendedprice) over (partition by l_shipdate) from lineitem order by l_tax;