# dbplyr
## Overview
dbplyr is the database backend for [dplyr](https://dplyr.tidyverse.org).
It allows you to use remote database tables as if they are in-memory
data frames by automatically converting dplyr code into SQL.
To learn more about why you might use dbplyr instead of writing SQL, see
`vignette("sql")`. To learn more about the details of the SQL
translation, see
[`vignette("translation-verb")`](https://dbplyr.tidyverse.org/articles/translation-verb.md)
and
[`vignette("translation-function")`](https://dbplyr.tidyverse.org/articles/translation-function.md).
## Installation
``` r
# The easiest way to get dbplyr is to install the whole tidyverse:
install.packages("tidyverse")
# Alternatively, install just dbplyr:
install.packages("dbplyr")
# Or the development version from GitHub:
# install.packages("pak")
pak::pak("tidyverse/dbplyr")
```
## Usage
dbplyr is designed to work with database tables as if they were local
data frames. To demonstrate this I’ll first create an in-memory SQLite
database and copy over a dataset:
``` r
library(dplyr, warn.conflicts = FALSE)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
copy_to(con, mtcars)
```
Note that you don’t actually need to load dbplyr with
[`library(dbplyr)`](https://dbplyr.tidyverse.org/); dplyr automatically
loads it for you when it sees you working with a database. Database
connections are coordinated by the DBI package. Learn more at
Now you can retrieve a table using
[`tbl()`](https://dplyr.tidyverse.org/reference/tbl.html) (see
[`?tbl_dbi`](https://dbplyr.tidyverse.org/reference/tbl.src_dbi.md) for
more details). Printing it just retrieves the first few rows:
``` r
mtcars2 <- tbl(con, "mtcars")
mtcars2
#> # A query: ?? x 11
#> # Database: sqlite 3.52.0 [:memory:]
#> mpg cyl disp hp drat wt qsec vs am gear carb
#>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # ℹ more rows
```
All dplyr calls are evaluated lazily, generating SQL that is only sent
to the database when you request the data.
``` r
# lazily generates query
summary <- mtcars2 |>
group_by(cyl) |>
summarise(mpg = mean(mpg, na.rm = TRUE)) |>
arrange(desc(mpg))
# see query
summary |> show_query()
#>
#> SELECT `cyl`, AVG(`mpg`) AS `mpg`
#> FROM `mtcars`
#> GROUP BY `cyl`
#> ORDER BY `mpg` DESC
# execute query and retrieve results
summary |> collect()
#> # A tibble: 3 × 2
#> cyl mpg
#>
#> 1 4 26.7
#> 2 6 19.7
#> 3 8 15.1
```
## Code of Conduct
Please note that the dbplyr project is released with a [Contributor Code
of Conduct](https://dbplyr.tidyverse.org/CODE_OF_CONDUCT.html). By
contributing to this project, you agree to abide by its terms.
# Package index
## dplyr verbs
### Connecting, copying, and retrieving data
- [`tbl(`*``*`)`](https://dbplyr.tidyverse.org/reference/tbl.src_dbi.md)
: Create a lazy query backed by a database
- [`collapse(`*``*`)`](https://dbplyr.tidyverse.org/reference/collapse.tbl_sql.md)
: Collapse a query into a subquery
- [`collect(`*``*`)`](https://dbplyr.tidyverse.org/reference/collect.tbl_sql.md)
: Collect results into a local data frame
- [`compute(`*``*`)`](https://dbplyr.tidyverse.org/reference/compute.tbl_sql.md)
: Save results into a new remote table
- [`copy_to(`*``*`)`](https://dbplyr.tidyverse.org/reference/copy_to.src_sql.md)
: Copy a local data frame to a remote database
- [`copy_inline()`](https://dbplyr.tidyverse.org/reference/copy_inline.md)
: Use a local data frame in a dbplyr query
- [`pull(`*``*`)`](https://dbplyr.tidyverse.org/reference/pull.tbl_sql.md)
: Extract a single column
- [`show_query(`*``*`)`](https://dbplyr.tidyverse.org/reference/show_query.md)
[`explain(`*``*`)`](https://dbplyr.tidyverse.org/reference/show_query.md)
: Show generated SQL and query plan
- [`last_sql()`](https://dbplyr.tidyverse.org/reference/last_sql.md) :
Retrieve the last SQL query generated
- [`.sql`](https://dbplyr.tidyverse.org/reference/dot-sql.md) : Flag SQL
function usage
### Verbs that affect rows
- [`arrange(`*``*`)`](https://dbplyr.tidyverse.org/reference/arrange.tbl_lazy.md)
: Arrange rows by column values
- [`distinct(`*``*`)`](https://dbplyr.tidyverse.org/reference/distinct.tbl_lazy.md)
: Subset distinct/unique rows
- [`filter(`*``*`)`](https://dbplyr.tidyverse.org/reference/filter.tbl_lazy.md)
[`filter_out(`*``*`)`](https://dbplyr.tidyverse.org/reference/filter.tbl_lazy.md)
: Keep or drop rows that match a condition
- [`head(`*``*`)`](https://dbplyr.tidyverse.org/reference/head.tbl_lazy.md)
: Subset the first rows
- [`slice_min(`*``*`)`](https://dbplyr.tidyverse.org/reference/dbplyr-slice.md)
[`slice_max(`*``*`)`](https://dbplyr.tidyverse.org/reference/dbplyr-slice.md)
[`slice_sample(`*``*`)`](https://dbplyr.tidyverse.org/reference/dbplyr-slice.md)
: Subset rows using their positions
### Verbs that affect columns
- [`mutate(`*``*`)`](https://dbplyr.tidyverse.org/reference/mutate.tbl_lazy.md)
: Create, modify, and delete columns
- [`select(`*``*`)`](https://dbplyr.tidyverse.org/reference/select.tbl_lazy.md)
[`rename(`*``*`)`](https://dbplyr.tidyverse.org/reference/select.tbl_lazy.md)
[`rename_with(`*``*`)`](https://dbplyr.tidyverse.org/reference/select.tbl_lazy.md)
[`relocate(`*``*`)`](https://dbplyr.tidyverse.org/reference/select.tbl_lazy.md)
: Subset, rename, and reorder columns using their names
### Grouping and summarising verbs
- [`count(`*``*`)`](https://dbplyr.tidyverse.org/reference/count.tbl_lazy.md)
[`add_count(`*``*`)`](https://dbplyr.tidyverse.org/reference/count.tbl_lazy.md)
[`tally(`*``*`)`](https://dbplyr.tidyverse.org/reference/count.tbl_lazy.md)
: Count observations by group
- [`group_by(`*``*`)`](https://dbplyr.tidyverse.org/reference/group_by.tbl_lazy.md)
: Group by one or more variables
- [`summarise(`*``*`)`](https://dbplyr.tidyverse.org/reference/summarise.tbl_lazy.md)
: Summarise each group to one row
- [`do(`*``*`)`](https://dbplyr.tidyverse.org/reference/do.tbl_sql.md)
**\[deprecated\]** : Perform arbitrary computation on remote backend
### Verbs that work with multiple tables
- [`bind_queries()`](https://dbplyr.tidyverse.org/reference/bind_queries.md)
: Combine multiple lazy queries
- [`inner_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
[`left_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
[`right_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
[`full_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
[`cross_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
[`semi_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
[`anti_join(`*``*`)`](https://dbplyr.tidyverse.org/reference/join.tbl_sql.md)
: Join SQL tables
- [`intersect(`*``*`)`](https://dbplyr.tidyverse.org/reference/intersect.tbl_lazy.md)
[`union(`*``*`)`](https://dbplyr.tidyverse.org/reference/intersect.tbl_lazy.md)
[`union_all(`*``*`)`](https://dbplyr.tidyverse.org/reference/intersect.tbl_lazy.md)
[`setdiff(`*``*`)`](https://dbplyr.tidyverse.org/reference/intersect.tbl_lazy.md)
: SQL set operations
### Verbs that modify the underlying data
- [`rows_insert(`*``*`)`](https://dbplyr.tidyverse.org/reference/rows-db.md)
[`rows_append(`*``*`)`](https://dbplyr.tidyverse.org/reference/rows-db.md)
[`rows_update(`*``*`)`](https://dbplyr.tidyverse.org/reference/rows-db.md)
[`rows_patch(`*``*`)`](https://dbplyr.tidyverse.org/reference/rows-db.md)
[`rows_upsert(`*``*`)`](https://dbplyr.tidyverse.org/reference/rows-db.md)
[`rows_delete(`*``*`)`](https://dbplyr.tidyverse.org/reference/rows-db.md)
: Edit individual rows in the underlying database table
- [`get_returned_rows()`](https://dbplyr.tidyverse.org/reference/get_returned_rows.md)
[`has_returned_rows()`](https://dbplyr.tidyverse.org/reference/get_returned_rows.md)
**\[experimental\]** :
Extract and check the `RETURNING` rows
## tidyr verbs
- [`complete(`*``*`)`](https://dbplyr.tidyverse.org/reference/complete.tbl_lazy.md)
: Complete a SQL table with missing combinations of data
- [`dbplyr_uncount()`](https://dbplyr.tidyverse.org/reference/dbplyr_uncount.md)
: "Uncount" a database table
- [`expand(`*``*`)`](https://dbplyr.tidyverse.org/reference/expand.tbl_lazy.md)
: Expand SQL tables to include all possible combinations of values
- [`fill(`*``*`)`](https://dbplyr.tidyverse.org/reference/fill.tbl_lazy.md)
: Fill in missing values with previous or next value
- [`pivot_longer(`*``*`)`](https://dbplyr.tidyverse.org/reference/pivot_longer.tbl_lazy.md)
: Pivot data from wide to long
- [`pivot_wider(`*``*`)`](https://dbplyr.tidyverse.org/reference/pivot_wider.tbl_lazy.md)
[`dbplyr_pivot_wider_spec()`](https://dbplyr.tidyverse.org/reference/pivot_wider.tbl_lazy.md)
: Pivot data from long to wide
- [`replace_na(`*``*`)`](https://dbplyr.tidyverse.org/reference/replace_na.tbl_lazy.md)
: Replace NAs with specified values
## Built-in database backends
- [`dialect_ansi()`](https://dbplyr.tidyverse.org/reference/backend-ansi.md)
[`simulate_dbi()`](https://dbplyr.tidyverse.org/reference/backend-ansi.md)
: ANSI SQL backend
- [`dialect_access()`](https://dbplyr.tidyverse.org/reference/backend-access.md)
[`simulate_access()`](https://dbplyr.tidyverse.org/reference/backend-access.md)
: MS Access backend
- [`backend-adbc`](https://dbplyr.tidyverse.org/reference/backend-adbc.md)
: ADBC backend
- [`dialect_db2()`](https://dbplyr.tidyverse.org/reference/backend-db2.md)
: DB2 backend
- [`dialect_hana()`](https://dbplyr.tidyverse.org/reference/backend-hana.md)
[`simulate_hana()`](https://dbplyr.tidyverse.org/reference/backend-hana.md)
: SAP HANA backend
- [`dialect_hive()`](https://dbplyr.tidyverse.org/reference/backend-hive.md)
[`simulate_hive()`](https://dbplyr.tidyverse.org/reference/backend-hive.md)
: Hive backend
- [`dialect_impala()`](https://dbplyr.tidyverse.org/reference/backend-impala.md)
[`simulate_impala()`](https://dbplyr.tidyverse.org/reference/backend-impala.md)
: Impala backend
- [`backend-jdbc`](https://dbplyr.tidyverse.org/reference/backend-jdbc.md)
: JDBC backend
- [`dialect_mssql()`](https://dbplyr.tidyverse.org/reference/backend-mssql.md)
[`simulate_mssql()`](https://dbplyr.tidyverse.org/reference/backend-mssql.md)
: SQL Server backend
- [`dialect_mariadb()`](https://dbplyr.tidyverse.org/reference/backend-mysql.md)
[`dialect_mysql()`](https://dbplyr.tidyverse.org/reference/backend-mysql.md)
[`simulate_mysql()`](https://dbplyr.tidyverse.org/reference/backend-mysql.md)
[`simulate_mariadb()`](https://dbplyr.tidyverse.org/reference/backend-mysql.md)
: MySQL/MariaDB backend
- [`dialect_odbc()`](https://dbplyr.tidyverse.org/reference/backend-odbc.md)
[`simulate_odbc()`](https://dbplyr.tidyverse.org/reference/backend-odbc.md)
: ODBC backend
- [`dialect_oracle()`](https://dbplyr.tidyverse.org/reference/backend-oracle.md)
[`simulate_oracle()`](https://dbplyr.tidyverse.org/reference/backend-oracle.md)
: Oracle backend
- [`dialect_postgres()`](https://dbplyr.tidyverse.org/reference/backend-postgres.md)
[`simulate_postgres()`](https://dbplyr.tidyverse.org/reference/backend-postgres.md)
: PostgreSQL backend
- [`dialect_redshift()`](https://dbplyr.tidyverse.org/reference/backend-redshift.md)
[`simulate_redshift()`](https://dbplyr.tidyverse.org/reference/backend-redshift.md)
: Redshift backend
- [`dialect_snowflake()`](https://dbplyr.tidyverse.org/reference/backend-snowflake.md)
[`simulate_snowflake()`](https://dbplyr.tidyverse.org/reference/backend-snowflake.md)
: Snowflake backend
- [`dialect_spark_sql()`](https://dbplyr.tidyverse.org/reference/backend-spark-sql.md)
[`simulate_spark_sql()`](https://dbplyr.tidyverse.org/reference/backend-spark-sql.md)
: Databricks Spark SQL backend
- [`dialect_sqlite()`](https://dbplyr.tidyverse.org/reference/backend-sqlite.md)
[`simulate_sqlite()`](https://dbplyr.tidyverse.org/reference/backend-sqlite.md)
: SQLite backend
- [`dialect_teradata()`](https://dbplyr.tidyverse.org/reference/backend-teradata.md)
[`simulate_teradata()`](https://dbplyr.tidyverse.org/reference/backend-teradata.md)
: Teradata backend
- [`with_dialect()`](https://dbplyr.tidyverse.org/reference/with_dialect.md)
: Override the SQL dialect for a connection
## Database connection
- [`memdb()`](https://dbplyr.tidyverse.org/reference/memdb.md)
[`memdb_frame()`](https://dbplyr.tidyverse.org/reference/memdb.md)
[`local_memdb_frame()`](https://dbplyr.tidyverse.org/reference/memdb.md)
: A temporary in-memory database
- [`remote_name()`](https://dbplyr.tidyverse.org/reference/remote_name.md)
[`remote_table()`](https://dbplyr.tidyverse.org/reference/remote_name.md)
[`remote_src()`](https://dbplyr.tidyverse.org/reference/remote_name.md)
[`remote_con()`](https://dbplyr.tidyverse.org/reference/remote_name.md)
[`remote_query()`](https://dbplyr.tidyverse.org/reference/remote_name.md)
[`remote_query_plan()`](https://dbplyr.tidyverse.org/reference/remote_name.md)
: Metadata about a remote table
## SQL generation
- [`escape()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_ident()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_logical()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_date()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_datetime()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_string()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_raw()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_vector()`](https://dbplyr.tidyverse.org/reference/escape.md) :
Escape/quote a value
- [`sql()`](https://dbplyr.tidyverse.org/reference/sql.md)
[`is.sql()`](https://dbplyr.tidyverse.org/reference/sql.md) : Literal
SQL escaping
- [`sql_glue()`](https://dbplyr.tidyverse.org/reference/sql_glue.md)
[`sql_glue2()`](https://dbplyr.tidyverse.org/reference/sql_glue.md) :
Build SQL strings with glue syntax
- [`translate_sql()`](https://dbplyr.tidyverse.org/reference/translate_sql.md)
[`translate_sql_()`](https://dbplyr.tidyverse.org/reference/translate_sql.md)
: Translate an expression to SQL
- [`window_order()`](https://dbplyr.tidyverse.org/reference/window_order.md)
[`window_frame()`](https://dbplyr.tidyverse.org/reference/window_order.md)
: Override window order and frame
- [`sql_options()`](https://dbplyr.tidyverse.org/reference/sql_options.md)
: Options for generating SQL
## dbplyr Backends
Documentation for authors of new dbplyr backends
- [`db_copy_to()`](https://dbplyr.tidyverse.org/reference/db-io.md)
[`db_compute()`](https://dbplyr.tidyverse.org/reference/db-io.md)
[`db_collect()`](https://dbplyr.tidyverse.org/reference/db-io.md)
[`sql_table_temporary()`](https://dbplyr.tidyverse.org/reference/db-io.md)
[`db_table_drop_if_exists()`](https://dbplyr.tidyverse.org/reference/db-io.md)
: Database I/O generics
- [`db_connection_describe()`](https://dbplyr.tidyverse.org/reference/db-misc.md)
[`sql_join_suffix()`](https://dbplyr.tidyverse.org/reference/db-misc.md)
[`db_sql_render()`](https://dbplyr.tidyverse.org/reference/db-misc.md)
[`db_col_types()`](https://dbplyr.tidyverse.org/reference/db-misc.md)
[`dbplyr_edition()`](https://dbplyr.tidyverse.org/reference/db-misc.md)
: Miscellaneous database generics
- [`sql_expr_matches()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_translation()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_random()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_table_analyze()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_table_index()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_explain()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_fields()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_save()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_wrap()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_indent_subquery()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_rows()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_returning_cols()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_multi_join()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_join()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_select()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_semi_join()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_set_op_method()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_set_op()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
[`sql_query_union()`](https://dbplyr.tidyverse.org/reference/db-sql.md)
: SQL generation generics
- [`escape()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_ident()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_logical()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_date()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_datetime()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_string()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_escape_raw()`](https://dbplyr.tidyverse.org/reference/escape.md)
[`sql_vector()`](https://dbplyr.tidyverse.org/reference/escape.md) :
Escape/quote a value
- [`sql_dialect()`](https://dbplyr.tidyverse.org/reference/sql_dialect.md)
[`new_sql_dialect()`](https://dbplyr.tidyverse.org/reference/sql_dialect.md)
: SQL dialects
- [`sql_glue()`](https://dbplyr.tidyverse.org/reference/sql_glue.md)
[`sql_glue2()`](https://dbplyr.tidyverse.org/reference/sql_glue.md) :
Build SQL strings with glue syntax
- [`sql_variant()`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`sql_translator()`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_scalar`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_agg`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_win`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_no_win`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_odbc_scalar`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_odbc_agg`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
[`base_odbc_win`](https://dbplyr.tidyverse.org/reference/sql_variant.md)
: Create an SQL translator
- [`sql_query_insert()`](https://dbplyr.tidyverse.org/reference/sql_query_insert.md)
[`sql_query_append()`](https://dbplyr.tidyverse.org/reference/sql_query_insert.md)
[`sql_query_update_from()`](https://dbplyr.tidyverse.org/reference/sql_query_insert.md)
[`sql_query_upsert()`](https://dbplyr.tidyverse.org/reference/sql_query_insert.md)
[`sql_query_delete()`](https://dbplyr.tidyverse.org/reference/sql_query_insert.md)
: Generate SQL for Insert, Update, Upsert, and Delete
- [`sql_infix()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
[`sql_prefix()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
[`sql_cast()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
[`sql_try_cast()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
[`sql_log()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
[`sql_cot()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
[`sql_runif()`](https://dbplyr.tidyverse.org/reference/sql_translation_scalar.md)
: SQL helpers for scalar functions
- [`sql_substr()`](https://dbplyr.tidyverse.org/reference/sql_translation_string.md)
[`sql_str_sub()`](https://dbplyr.tidyverse.org/reference/sql_translation_string.md)
[`sql_paste()`](https://dbplyr.tidyverse.org/reference/sql_translation_string.md)
[`sql_paste_infix()`](https://dbplyr.tidyverse.org/reference/sql_translation_string.md)
: SQL helpers for string functions
- [`sql_aggregate()`](https://dbplyr.tidyverse.org/reference/sql_translation_agg.md)
[`sql_aggregate_2()`](https://dbplyr.tidyverse.org/reference/sql_translation_agg.md)
[`sql_aggregate_n()`](https://dbplyr.tidyverse.org/reference/sql_translation_agg.md)
[`sql_check_na_rm()`](https://dbplyr.tidyverse.org/reference/sql_translation_agg.md)
[`sql_not_supported()`](https://dbplyr.tidyverse.org/reference/sql_translation_agg.md)
: SQL helpers for aggregate functions
- [`win_over()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_rank()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_aggregate()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_aggregate_2()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_cumulative()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_absent()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_current_group()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_current_order()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
[`win_current_frame()`](https://dbplyr.tidyverse.org/reference/sql_translation_window.md)
: SQL helpers for window functions
# Articles
### All vignettes
- [Introduction to
dbplyr](https://dbplyr.tidyverse.org/articles/dbplyr.md):
- [Developing a dbplyr
backend](https://dbplyr.tidyverse.org/articles/new-backend.md):
- [Reprexes for
dbplyr](https://dbplyr.tidyverse.org/articles/reprex.md):
- [Function
translation](https://dbplyr.tidyverse.org/articles/translation-function.md):
- [Verb
translation](https://dbplyr.tidyverse.org/articles/translation-verb.md):