Calculated field
{ FIXED [Customer] : SUM([Revenue]) }
Sample data
| Region | Team | Customer | Revenue | Seats | Date |
|---|---|---|---|---|---|
| North | Cedar | Aster | 120 | 4 | 2026-01-05 |
| North | Cedar | Aster | 80 | 2 | 2026-02-05 |
| North | Cedar | Birch | 300 | 6 | 2026-01-12 |
| North | Pine | Clover | 90 | 3 | 2026-02-14 |
| South | Elm | Dahlia | 200 | 5 | 2026-01-08 |
| South | Elm | Dahlia | 100 | 2 | 2026-02-08 |
| South | Ash | Fern | 75 | 3 | 2026-01-20 |
| South | Ash | Fern | 25 | 1 | 2026-02-20 |
The same calculation as SQL
SELECT "Customer", SUM(Revenue) AS result FROM input GROUP BY "Customer" ORDER BY "Customer"
Runs the example above.
SELECT "Customer", SUM(Revenue) AS result FROM input GROUP BY "Customer" ORDER BY "Customer"
Written for this dialect; not run here.
SELECT `Customer`, SUM(Revenue) AS result FROM input GROUP BY `Customer` ORDER BY `Customer`
Written for this dialect; not run here.
Result
| Customer | result |
|---|---|
| Aster | 200 |
| Birch | 300 |
| Clover | 90 |
| Dahlia | 300 |
| Fern | 100 |
Same rows from the calculation and from the SQL in DuckDB.
Where a naive translation goes wrong
- Averaging invoice rows does not compute customer lifetime revenue when customers have multiple invoices.
Naive SQL
SELECT "Customer", AVG(Revenue) AS result FROM input GROUP BY "Customer" ORDER BY "Customer"
Customer result Aster 100 Birch 300 Clover 90 Dahlia 150 Fern 50 Matches the calculation
SELECT "Customer", SUM(Revenue) AS result FROM input GROUP BY "Customer" ORDER BY "Customer"
Customer result Aster 200 Birch 300 Clover 90 Dahlia 300 Fern 100
Signature
{ FIXED [Customer] : SUM([Revenue]) }