Execute this SQL
-- Here we make use of list_transform and -- the fact that DuckDB knows lambda expressions SELECT list_transform(split('01:08:22', ':'), x -> CAST (x AS INTEGER));
Copy code
Michael Simons
Copy code
Expand
Share link
Execute this SQL
-- * EXCLUDE plus any additional expression does the trick SELECT * EXCLUDE (valid_from), -- valid_from used in computation year(valid_from) AS year -- A new expression FROM prices -- Note that the new expression can be referred to in the WHERE clause WHERE year BETWEEN 2019 AND 2020;
Copy code
Michael Simons
Copy code
Expand
Share link
Execute this SQL
-- bar(x, min, max[, width]) --- Draw a band whose width is proportional to (x - min) and equal to width characters when x = max. width defaults to 80. with data as (select unnest(range(1,10)) as v order by random()) select bar(v,minv,maxv,30) from data, (select min(v) as minv, max(v) as maxv from data); -- ┌────────────────────────────────┐ -- │ bar(v, minv, maxv, 30) │ -- │ varchar │ -- ├────────────────────────────────┤ -- │ ██████████████████████▌ │ -- │ ███▊ │ -- │ ██████████████████████████████ │ -- │ │ -- │ ███████████████ │ -- │ ███████████▎ │ -- │ ██████████████████▊ │ -- │ ██████████████████████████▎ │ -- │ ███████▌ │ -- └────────────────────────────────┘
Copy code
Michael Hunger
Copy code
Expand
Share link
Execute this SQL
-- duckdb has only weekday-name not number -- create enum in the right order create type Weekday as enum ('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'); -- cast the string to enum for sorting select count(*), cast(dayname(CreationDate) as Weekday) as day from posts where posttypeid = 1 and tags like '%>sql<%' group by all order by day asc; -- doing the cast in order by causes a bug -- ┌──────────────┬───────────┐ -- │ count_star() │ day │ -- │ int64 │ weekday │ -- ├──────────────┼───────────┤ -- │ 103937 │ Monday │ -- │ 115575 │ Tuesday │ -- │ 119825 │ Wednesday │ -- │ 119514 │ Thursday │ -- │ 103445 │ Friday │ -- │ 47139 │ Saturday │ -- │ 47390 │ Sunday │ -- └──────────────┴───────────┘
Copy code
Michael Hunger
Copy code
Expand
Share link
Execute this SQL
select round(2061899,-6); -- 2000000.0
Copy code
Michael Hunger
Copy code
Expand
Share link
Execute this SQL
-- Using Scaleway as an example, where first 75GB is free -- https://www.scaleway.com/en/object-storage/ -- This also works for Google Storage, Digital Ocean Spaces, -- Wasabi and so on -- set these like you do for AWS SET s3_access_key_id='MY_KEY' SET s3_secret_access_key='MY_SECRET' -- set the endpoint and region to override the default of -- using AWS endpoints SET s3_endpoint='s3.nl-ams.scw.cloud' SET s3_region="nl-ams" SELECT -- format a large number with helpful commas -- for readability format('{:,}', count(*)) as "total rows in file" FROM "s3://<BUCKET_NAME>/<FILE_NAME>.zst.parquet"
Copy code
Chris Adams
Copy code
Expand
Share link
Execute this SQL
LOAD spatial; -- Pick for example any Garmin Connect or Strava export as GPX file -- https://en.wikipedia.org/wiki/GPS_Exchange_Format SELECT round( -- Compute the length of the geomentry in the units of the -- reference system being used ST_Length( -- Transform from standard GPS WGS-84 into a reference system -- that uses meters. EPSG:25832 stands for ETRS89 / UTM zone 32N, -- Europe between 6°E and 12°E ST_transform( -- Fix the order of coordinates -- (GXP read as long/lat, we need lat/long) ST_FlipCoordinates( -- Turn the WKT into a DuckDB Geometry ST_GeomFromWKB(wkb_geometry) ), 'EPSG:4326', 'EPSG:25832' ) ) /1000, 2) AS 'Distance (km)' FROM st_read('activity_11501782487.gpx', layer='tracks');
Copy code
Michael Simons
Copy code
Expand
Share link
Execute this SQL
-- This requires the spatial extension LOAD spatial; -- Pick for example any Garmin Connect or Strava export as GPX file -- https://en.wikipedia.org/wiki/GPS_Exchange_Format WITH elevation_gains AS ( SELECT ele - lag(ele) OVER (ORDER BY track_seg_point_id ASC) AS value FROM st_read('activity_11501782487.gpx', layer='track_points') ) SELECT sum(e.value) FILTER (WHERE e.value >= 0) AS ascent, sum(e.value) FILTER (WHERE e.value < 0) AS descent FROM elevation_gains e;
Copy code
Michael Simons
Copy code
Expand
Share link