Use this file to discover all available pages before exploring further.
DuckDB provides a rich SQL query syntax that supports standard SQL operations along with advanced features like CTEs, subqueries, and analytical operations.
You can group by expressions and use column aliases:
SELECT b % 2 AS f, SUM(a) AS totalFROM test GROUP BY f ORDER BY f;SELECT DATE_TRUNC('month', order_date) AS month, SUM(amount) AS monthly_totalFROM salesGROUP BY monthORDER BY month;
WITH cte1 AS ( SELECT i AS j FROM a ), cte2 AS ( SELECT ref.j AS k FROM cte1 AS ref ), cte3 AS ( SELECT ref2.j + 1 AS i FROM cte1 AS ref2 )SELECT * FROM cte2, cte3;
WITH dept_avg AS ( SELECT depname, AVG(salary) AS avg_salary FROM empsalary GROUP BY depname)SELECT e.depname, e.empno, e.salary, d.avg_salaryFROM empsalary eJOIN dept_avg d ON e.depname = d.depnameWHERE e.salary > d.avg_salary;
WITH cte1 AS ( SELECT i AS j FROM a)SELECT * FROM cte1 cte11, cte1 cte12;-- CTE in subqueryWITH cte1 AS ( SELECT i AS j FROM a)SELECT * FROM cte1 WHERE j = (SELECT MAX(j) FROM cte1 AS cte2);
-- First 10 rowsSELECT * FROM test LIMIT 10;-- Skip 20 rows, return next 10SELECT * FROM test LIMIT 10 OFFSET 20;-- Alternative syntaxSELECT * FROM test OFFSET 20 LIMIT 10;
SELECT empno, salary, CASE WHEN salary < 4000 THEN 'Low' WHEN salary < 5000 THEN 'Medium' ELSE 'High' END AS salary_bracketFROM empsalary;-- Simple CASESELECT CASE depname WHEN 'develop' THEN 'Engineering' WHEN 'sales' THEN 'Sales' ELSE 'Other' END AS dept_categoryFROM empsalary;
WITH dept_stats AS ( SELECT depname, COUNT(*) AS emp_count, AVG(salary) AS avg_salary, MAX(salary) AS max_salary FROM empsalary GROUP BY depname ), high_earners AS ( SELECT e.depname, e.empno, e.salary, e.enroll_date FROM empsalary e JOIN dept_stats d ON e.depname = d.depname WHERE e.salary > d.avg_salary )SELECT h.depname, h.empno, h.salary, d.avg_salary, h.salary - d.avg_salary AS above_avg, ROUND(100.0 * h.salary / d.max_salary, 2) AS pct_of_maxFROM high_earners hJOIN dept_stats d ON h.depname = d.depnameORDER BY h.depname, h.salary DESC;
Use CTEs to break complex queries into readable, maintainable parts. DuckDB’s optimizer will still generate efficient execution plans.