Data Querying
Lido provides QUERYTABLE, which lets you run SQL queries directly against your Lido tables. This is a non-action formula — it executes immediately and returns the query result as a cell range.
QUERYTABLE
Runs a SQL query against one or more Lido tables and returns the result as a 2D range. Under the hood, Lido loads your table data into an in-memory PostgreSQL database (PGlite) and executes the query.
Syntax:
=QUERYTABLE(query)
=QUERYTABLE(query, return_headers)
Parameters:
| Parameter | Description | Required |
|---|---|---|
query | A SQL query string referencing Lido table names | Yes |
return_headers | If FALSE, omits column headers from the result (default: TRUE) | No |
Examples:
=QUERYTABLE("SELECT * FROM Orders WHERE Status = 'Pending'")
Returns all rows from the Orders table where Status is "Pending", with column headers in the first row.
=QUERYTABLE("SELECT Region, SUM(Revenue) as Total FROM Clients GROUP BY Region ORDER BY Total DESC")
Aggregates revenue by region from the Clients table.
=QUERYTABLE("SELECT o.OrderID, c.Name FROM Orders o JOIN Clients c ON o.ClientID = c.ID")
Joins two Lido tables together.
How It Works
- QUERYTABLE parses your SQL to identify which table names are referenced
- For each table, it loads the current table data (including column types) into an in-memory PostgreSQL instance
- The query is executed and results are returned as a cell range
- Column types are preserved — numeric columns remain numbers, booleans remain booleans, etc.
Supported SQL
QUERYTABLE supports standard PostgreSQL SQL syntax, including:
SELECT,WHERE,ORDER BY,GROUP BY,HAVING,LIMIT- Aggregate functions:
SUM,COUNT,AVG,MIN,MAX JOINacross multiple Lido tables- Subqueries
- String functions, date functions, and more
Tips
- Table names in the query must match your Lido table names exactly (case-sensitive)
- The result updates automatically when the source table data changes
- Use
return_headers = FALSEwhen feeding the result into another formula that doesn't expect headers - For very large tables, be mindful that the entire table is loaded into memory for query execution