Interactive example

See the SQL before connecting.

Change the filters and inspect the TypeScript, SQL, and parameters. These queries compile in your browser; no database connection is needed.

TypeScript

const db = createClickHouseDB<DB>();

let query = db
  .selectFrom("events as e")
  .prewhere("e.tenant_id", "=", 1)
  .where("e.created_at", ">=", "2026-08-01");

const result = query
  .selectExpr(eb => ["e.event_type", eb.fn.count().as("events")])
  .groupBy("e.event_type")
  .orderBy("events", "desc")
  .limit(20);

result.toSQL();

Generated SQL

SELECT e.event_type, count() AS events
FROM events AS e
PREWHERE e.tenant_id = {p0:Int64}
WHERE e.created_at >= {p1:String}
GROUP BY e.event_type
ORDER BY events DESC
LIMIT 20

Bound parameters

{
  "p0": 1,
  "p1": "2026-08-01"
}

Result shape

{
  event_type: string;
  events: string; // UInt64
}[]

Values remain separate from SQL. Connect your client to execute the query, or generate types from your schema.