Calculated field
LOG([amount], 2)
Sample data
| id | amount | units | score | other |
|---|---|---|---|---|
| 1 | -2.5 | 2 | -0.8 | 3 |
| 2 | 0 | 0 | 0 | 4 |
| 3 | 1.5 | 3 | 0.25 | 2 |
| 4 | 4 | 4 | 0.5 | 8 |
| 5 | 9 | 5 | 0.8 | 11 |
| 6 | 16 | 6 | 1 | 14 |
| 7 | null | 7 | null | 9 |
| 8 | 4 | 8 | -0.5 | null |
The same calculation as SQL
SELECT CASE WHEN amount>0 THEN ln(amount)/ln(2) ELSE NULL END AS result FROM input ORDER BY id
Runs the example above.
SELECT CASE WHEN amount>0 THEN ln(amount)/ln(2) ELSE NULL END AS result FROM input ORDER BY id
Written for this dialect; not run here.
SELECT CASE WHEN amount>0 THEN ln(amount)/ln(2) ELSE NULL END AS result FROM input ORDER BY id
Written for this dialect; not run here.
Result
| id | amount | units | score | result |
|---|---|---|---|---|
| 1 | -2.5 | 2 | -0.8 | null |
| 2 | 0 | 0 | 0 | null |
| 3 | 1.5 | 3 | 0.25 | 0.584963 |
| 4 | 4 | 4 | 0.5 | 2 |
| 5 | 9 | 5 | 0.8 | 3.16993 |
| 6 | 16 | 6 | 1 | 4 |
| 7 | null | 7 | null | null |
| 8 | 4 | 8 | -0.5 | 2 |
Same rows from the calculation and from the SQL in DuckDB.
Where a naive translation goes wrong
- The default base-ten logarithm differs from the requested base two.
Naive SQL
SELECT CASE WHEN amount>0 THEN log10(amount) ELSE NULL END AS result FROM input ORDER BY id
id amount units score result 1 -2.5 2 -0.8 null 2 0 0 0 null 3 1.5 3 0.25 0.176091 4 4 4 0.5 0.60206 5 9 5 0.8 0.954243 6 16 6 1 1.20412 7 null 7 null null 8 4 8 -0.5 0.60206 Matches the calculation
SELECT CASE WHEN amount>0 THEN ln(amount)/ln(2) ELSE NULL END AS result FROM input ORDER BY id
id amount units score result 1 -2.5 2 -0.8 null 2 0 0 0 null 3 1.5 3 0.25 0.584963 4 4 4 0.5 2 5 9 5 0.8 3.16993 6 16 6 1 4 7 null 7 null null 8 4 8 -0.5 2
Signature
LOG(number, [number])