SELECT keyword
SELECT allows you to specify list of columns and expressions to be selected
and evaluated from a table.
Syntax#
tip
While ingesting data using ILP, data may not be immediately available to a
SELECTquery, due to the commit lag setting. Please see the InfluxDB line protocol reference for more information.The
tablecan either be in your database (in which case you would pass the table's name), or the result of a sub query.
Simple select#
All columns#
QuestDB supports SELECT * FROM tablename. When selecting all, you can also
omit most of the statement and pass the table name.
The two examples below are equivalent
Specific columns#
To select specific columns, replace * by the names of the columns you are interested in.
Example:
Arithmetic expressions#
SELECT is capable of evaluating multiple expressions and functions. You can
mix comma separated lists of expressions with the column names you are
selecting.
The result of rating > 3.5 is a boolean. The column will be named good and
take values true or false.
Aliases#
Using aliases allow you to give expressions or column names of your choice. You can assign an alias to a column or an expression by writing the alias name you want after that expression
note
Alias names and column names must be unique.
Aggregation#
info
Supported aggregation functions are listed on the aggregation reference.
Aggregation by group#
QuestDB evaluates aggregation functions without need for traditional GROUP BY.
Use a mix of column names and aggregation functions in a SELECT clause. You
can have any number of discrete value columns and any number of aggregation
functions.
Aggregation arithmetic#
Aggregation functions can be used in arithmetic expressions. The following
computes mid of rating values for every movie.
tip
Whenever possible, it is recommended to perform arithmetic outside of
aggregation functions as this can have a dramatic impact on performance. For
example, min(value/2) is going to execute considerably more slowly than
min(value)/2, although both return the same result.
Supported clauses#
QuestDB supports the following standard SQL clauses within SELECT statements.
CASE#
Conditional results based on expressions.
Syntax#
For more information, please refer to the CASE reference
CAST#
Convert values and expression between types.
Syntax#
For more information, please refer to the CAST reference
DISTINCT#
Returns distinct values of the specified column(s).
Syntax#
For more information, please refer to the DISTINCT reference.
FILL#
Defines filling strategy for missing data in aggregation queries. This function complements SAMPLE BY queries.
Syntax#
For more information, please refer to the FILL reference.
JOIN#
Join tables based on a key or timestamp.
Syntax#
For more information, please refer to the JOIN reference
LIMIT#
Specify the number and position of records returned by a query.
Syntax#
For more information, please refer to the LIMIT reference.
ORDER BY#
Orders the results of a query by one or several columns.
Syntax#
For more information, please refer to the ORDER BY reference
UNION, EXCEPT & INTERSECT#
Combine the results of two or more select statements. Can include or ignore duplicates.
Syntax#
For more information, please refer to the UNION, EXCEPT & INTERSECT reference
WHERE#
Filters query results
Syntax#
QuestDB supports complex WHERE clauses along with type-specific searches. For more information, please refer to the WHERE reference. There are different syntaxes for text, numeric, or timestamp filters.
Additional time series clauses#
QuestDB augments SQL with the following clauses.
LATEST BY#
Retrieves the latest entry by timestamp for a given key or combination of keys This function requires a designated timestamp.
Syntax#
For more information, please refer to the LATEST ON reference.
SAMPLE BY#
Aggregates time series data into homogeneous time chunks. For example daily average, monthly maximum etc. This function requires a designated timestamp.
Syntax#
For more information, please refer to the SAMPLE BY reference.
TIMESTAMP#
Dynamically creates a designated timestamp on the output of a query. This allows to perform timestamp operations like SAMPLE BY or LATEST ON on tables which originally do not have a designated timestamp.
caution
The output query must be ordered by time. TIMESTAMP() does not check for order
and using timestamp functions on unordered data may produce unexpected results.
Syntax#
For more information, refer to the TIMESTAMP reference