-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchap4.qmd
125 lines (99 loc) · 2.37 KB
/
chap4.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
---
title: "必知必会第4课:过滤数据"
author: "黄天元"
format: html
editor: visual
---
## 数据库的连接
```{r}
library(pacman)
p_load(tidyverse,DBI,RSQLite)
mydb = dbConnect(RSQLite::SQLite(), "data/TYSQL.sqlite")
```
## 基于SQL的数据操作
```{r}
# 4.1
dbGetQuery(mydb,"SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;")
# 4.2.1
dbGetQuery(mydb,"SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;")
dbGetQuery(mydb,"SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;")
# 4.2.2
dbGetQuery(mydb,"SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';")
dbGetQuery(mydb,"SELECT vend_id, prod_name
FROM Products
WHERE vend_id != 'DLL01';")
# 4.2.3
dbGetQuery(mydb,"SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;")
# 4.2.4
dbGetQuery(mydb,"SELECT prod_name
FROM Products
WHERE prod_price IS NULL;")
dbGetQuery(mydb,"SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;")
```
## 基于tidyverse的数据操作
```{r}
# 4.1
tbl(mydb,"Products") %>%
filter(prod_price == 3.49) %>%
select(prod_name, prod_price)
# 4.2.1
tbl(mydb,"Products") %>%
filter(prod_price < 10) %>%
select(prod_name, prod_price)
tbl(mydb,"Products") %>%
filter(prod_price <= 10) %>%
select(prod_name, prod_price)
# 4.2.2
tbl(mydb,"Products") %>%
filter(vend_id != 'DLL01') %>%
select(vend_id, prod_name)
# 4.2.3
tbl(mydb,"Products") %>%
filter(between(prod_price,5,10)) %>%
select(prod_name, prod_price)
# 4.2.4
tbl(mydb,"Products") %>%
filter(is.na(prod_price)) %>%
select(prod_name)
tbl(mydb,"Customers") %>%
filter(is.na(cust_email)) %>%
select(cust_name)
```
## 练习
- 请使用SQL和R两种方式,解决课后的挑战题。
```{r}
#| echo: false
#| eval: false
## SQL
# 参考:https://forta.com/books/0135182794/challenges/
## R
# 1
tbl(mydb,"Products") %>%
filter(prod_price == 9.49) %>%
select(prod_id,prod_name)
# 2
tbl(mydb,"Products") %>%
filter(prod_price >= 9) %>%
select(prod_id,prod_name)
# 3
tbl(mydb,"OrderItems") %>%
filter(quantity >= 100) %>%
distinct(order_num)
# 4
tbl(mydb,"Products") %>%
filter(between(prod_price,3,6)) %>%
select(prod_name,prod_price) %>%
arrange(prod_price)
```