dbplyr / SQL Exercises in R: 15 Practice Problems
Fifteen practice problems on dbplyr: connect, translate dplyr to SQL, lazy ops, joins, collect. Hidden solutions.
library(dplyr)
library(dbplyr)
library(DBI)
library(RSQLite)
Exercise 1: Connect to SQLite (in-memory)
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:")
dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)
Exercise 2: tbl reference
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:")
dbWriteTable(con, "mtcars", mtcars)
mt <- tbl(con, "mtcars")
mt
Exercise 3: filter
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
tbl(con, "mtcars") |> filter(mpg > 25)
Exercise 4: Show SQL
Difficulty: Intermediate.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
tbl(con, "mtcars") |> filter(mpg > 25) |> show_query()
Exercise 5: select
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
tbl(con, "mtcars") |> select(mpg, cyl)
Exercise 6: group_by + summarise
Difficulty: Intermediate.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
tbl(con, "mtcars") |> group_by(cyl) |> summarise(m = mean(mpg))
Exercise 7: arrange
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
tbl(con, "mtcars") |> arrange(desc(mpg))
Exercise 8: collect to local
Difficulty: Intermediate.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
local_df <- tbl(con, "mtcars") |> filter(mpg > 25) |> collect()
nrow(local_df)
Exercise 9: Inner join
Difficulty: Intermediate.
Show solution
con <- dbConnect(SQLite(), ":memory:")
dbWriteTable(con, "a", data.frame(id = 1:3, x = 10:12))
dbWriteTable(con, "b", data.frame(id = 2:4, y = 20:22))
inner_join(tbl(con, "a"), tbl(con, "b"), by = "id")
Exercise 10: Send raw SQL
Difficulty: Intermediate.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
dbGetQuery(con, "SELECT cyl, AVG(mpg) AS m FROM mtcars GROUP BY cyl")
Exercise 11: List tables
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)
Exercise 12: Disconnect
Difficulty: Beginner.
Show solution
con <- dbConnect(SQLite(), ":memory:")
dbDisconnect(con)
Exercise 13: window function via SQL
Difficulty: Advanced.
Show solution
con <- dbConnect(SQLite(), ":memory:"); dbWriteTable(con, "mtcars", mtcars)
tbl(con, "mtcars") |> group_by(cyl) |>
mutate(rk = row_number(desc(mpg))) |>
show_query()
Exercise 14: SQL escape protected string
Difficulty: Advanced.
Show solution
con <- dbConnect(SQLite(), ":memory:")
dbQuoteIdentifier(con, "my table")
Exercise 15: Write large data
Difficulty: Intermediate.
Show solution
con <- dbConnect(SQLite(), "demo.sqlite")
dbWriteTable(con, "mtcars", mtcars, overwrite = TRUE)
dbDisconnect(con)
What to do next
- dplyr-Exercises (shipped), local dplyr practice.
- Data-Wrangling-Exercises (shipped), broader wrangling.