# 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):