library(DBI)
library(RPostgreSQL)
## Warning: package 'RPostgreSQL' was built under R version 4.2.2
<- dbConnect(RPostgreSQL::PostgreSQL(), dbname = "postgres", host = "localhost", user = "postgres", password = "12345678")
con
::opts_chunk$set(connection = "con") # 全局设置 knitr
参考:
[1] https://community.rstudio.com/t/sql-errors-while-rendering-quarto/147671
[2] https://hevodata.com/learn/rpostgresql/
[3] https://d.cosx.org/d/419974-r-markdown-sql
[4] https://bookdown.org/yihui/rmarkdown/language-engines.html#sql
建议使用 11 版本的 PostgreSQL。需要安装包 DBI
和 RPostgreSQL
,如果使用的是 MySQL 的话安装 RMySQL
。安装完后记得加载:
设置通用接口:
对以上的 code chunk 设置 include = FALSE
能够隐藏该代码块。
一些未知的原因导致我不能使用 SQL 代码块创建表,但可以使用查询。所以我事先使用以下代码把示例数据在 PostgreSQL 中创建好,之后再通过 SQL 代码块查询。
-- 创建表
CREATE TABLE Product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
-- DML:插入数据
BEGIN TRANSACTION;
INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');
COMMIT;
-- 选取表
SELECT * FROM Product;
product_id | product_name | product_type | sale_price | purchase_price | regist_date |
---|---|---|---|---|---|
0001 | T恤衫 | 衣服 | 1000 | 500 | 2009-09-20 |
0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-09-11 |
0003 | 运动T恤 | 衣服 | 4000 | 2800 | NA |
0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-09-20 |
0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2009-01-15 |
0006 | 叉子 | 厨房用具 | 500 | NA | 2009-09-20 |
0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2008-04-28 |
0008 | 圆珠笔 | 办公用品 | 100 | NA | 2009-11-11 |
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type;
product_type | count |
---|---|
衣服 | 2 |
办公用品 | 2 |
厨房用具 | 4 |