{"id":1071,"date":"2019-04-01T23:57:32","date_gmt":"2019-04-01T14:57:32","guid":{"rendered":"http:\/\/141.164.34.82\/?p=1071"},"modified":"2019-04-02T01:56:45","modified_gmt":"2019-04-01T16:56:45","slug":"dplyr%ec%9d%84-sql%eb%a1%9c","status":"publish","type":"post","link":"http:\/\/ds.sumeun.org\/?p=1071","title":{"rendered":"dplyr\uc744 SQL\ub85c"},"content":{"rendered":"<pre><code class=\"r\">install.packages(dplyr)\ninstall.packages(nycflights13)\n\ninstall.packages(sqldf)\n#install.packages(&#39;RSQLite&#39;)\n<\/code><\/pre>\n<h1>dplyr\uc744 SQL\ub85c \ubc88\uc5ed\ud558\uae30<\/h1>\n<p>\ub370\uc774\ud130 \ubd84\uc11d\uac00\uc5d0\uac8c \ud544\uc694\ud55c \uc5ed\ub7c9 \uc911\uc758 \ud558\ub098\uac00 SQL(Structured Query Language)\uc774\ub2e4. \ud558\uc9c0\ub9cc \uc2dc\uac04\uc744 \ub0b4\uc5b4 \ubc30\uc6b0\uae30 \ud798\ub4e4\uace0, \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud574\uc57c \ud560 \ud544\uc694\uac00 \uc788\uc744 \ub54c\uc5d0\ub294 \uac04\ub2e8\ud558\uac8c <code>dplyr<\/code> \ud568\uc218\ub97c <strong>\ubc88\uc5ed<\/strong>\ud574\uc11c \uc4f8 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc544\ub798\uc5d0\ub294 \uc218\uae30\ub85c \ud558\ub294 \ubc88\uc5ed\uacfc <code>dbplyr<\/code>\uc758 \ud568\uc218\ub97c \ud65c\uc6a9\ud558\uc5ec \uc790\ub3d9\uc73c\ub85c \ubc88\uc5ed\ud558\ub294 \ubc29\ubc95\uc744 \uc18c\uac1c\ud55c\ub2e4.<\/p>\n<h2>\uc218\uae30 \ubc88\uc5ed<\/h2>\n<p>\uc544\ub798\uc758 \ud45c\ub294 <code>dplyr<\/code>\uc758 \ub300\ud45c\uc801\uc778 \ud568\uc218\ub97c <code>SQL<\/code>\ub85c \ubc88\uc5ed\ud55c \uacb0\uacfc\ub97c \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n<table>\n<thead>\n<tr>\n<th align=\"left\"><code>package:dplyr<\/code><\/th>\n<th align=\"left\"><code>SQL<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><code>dat %&gt;% select(cola,colb)<\/code><\/td>\n<td align=\"left\"><code>SELECT cola, colb FROM dat<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>head(5)<\/code><\/td>\n<td align=\"left\"><code>LIMIT 5<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(cola &gt; 3)<\/code><\/td>\n<td align=\"left\"><code>WHERE cola &gt; 3<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(cola &gt; 3 &amp; colb &lt; 5)<\/code><\/td>\n<td align=\"left\"><code>WHERE cola &gt; 3 AND colb &lt; 5<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(is.na(cola))<\/code><\/td>\n<td align=\"left\"><code>WHERE cola IS NULL<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>select(cola) %&gt;% filter(!duplicated(cola))<\/code><\/td>\n<td align=\"left\"><code>SELECT DISTINCT cola<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(year(coldate) &gt;= 2002 &amp; year(coldate) &lt;= 2003)<\/code><\/td>\n<td align=\"left\"><code>WHERE coldate BETWEEN 2002 AND 2003<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(country == &quot;Korea&quot;)<\/code><\/td>\n<td align=\"left\"><code>WHERE country = &#39;Korea&#39;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(str_detect(cola, &#39;^.a&#39;))<\/code><\/td>\n<td align=\"left\"><code>WHERE cola LIKE &#39;_a%&#39;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(str_detect(name, &quot;^B&quot;))<\/code><\/td>\n<td align=\"left\"><code>WHERE name LIKE &#39;B%&#39;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>transmute(colc = cola - colb)<\/code><\/td>\n<td align=\"left\"><code>SELECT cola - colb AS colc<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>mutate(result=8 %\/% 3)<\/code><\/td>\n<td align=\"left\"><code>SELECT (8\/3) AS result<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>group_by(colb)<\/code><\/td>\n<td align=\"left\"><code>GROUP BY colb<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>arrange(cola)<\/code><\/td>\n<td align=\"left\"><code>ORDER BY cola<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>filter(!duplicated(cola)) %&gt;% nrow<\/code><\/td>\n<td align=\"left\"><code>SELECT COUNT(DISTINCT cola)<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><code>nrow(dfA)<\/code><\/td>\n<td align=\"left\"><code>SELECT COUNT(*) FROM dfA<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><code>SQL<\/code>\uc5d0\uc11c \uba87 \uac00\uc9c0 \uc8fc\uc758\ud560 \uc810\uc740 \ub2e4\uc74c\uac19 \uac19\ub2e4. <\/p>\n<ul>\n<li><code>SQL<\/code>\uc5d0\uc11c \ubb38\uc790\uc5f4\uc740 <code>&#39;<\/code>\ub85c \uac10\uc2fc\ub2e4. <code>&quot;<\/code>\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub2e4.<\/li>\n<li><code>SQL<\/code>\uc5d0\uc11c <code>NULL<\/code>\uc740 \uacb0\uce21\uce58\ub97c \ub098\ud0c0\ub0b8\ub2e4.<\/li>\n<li>\ubb38\uc790\uc5f4 \ud328\ud134\uc744 \ub098\ud0c0\ub0b4\ub294 <code>&#39;B%&#39;<\/code>, <code>&#39;_a%&#39;<\/code>\uc744 \uc720\uc758\ud574\uc11c \ubcf4\uc790. <\/li>\n<li>\uc704 <code>dplyr<\/code> \ud568\uc218\ub294 <code>dat %&gt;%<\/code>\uac00 \uc0dd\ub7b5\ub418\uc5c8\ub2e4. <code>SQL<\/code>\uc5d0\uc11c\ub3c4 <code>FROM dat<\/code>\uc774 \uc0dd\ub7b5\ub418\uc5c8\ub2e4.<\/li>\n<\/ul>\n<h3>\uc2e4\ub840<\/h3>\n<ul>\n<li>\uc5ec\uae30\uc11c\ub294 R\uc758 \ub370\uc774\ud130 \ud504\ub808\uc784\uc5d0 SQL \uba85\ub839\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 <code>sqldf<\/code> \ud568\uc218\ub85c <code>dplyr<\/code>\uc758 \ud568\uc218\uc640 SQL\uc758 \ubc29\ubc95\uc744 \ube44\uad50\ud574 \ubcf4\uc558\ub2e4.<\/li>\n<\/ul>\n<pre><code class=\"r\">library(dplyr)\nlibrary(sqldf)\n#library(RSQLite)\nlibrary(nycflights13)\nhead(flights)\n<\/code><\/pre>\n<pre>## # A tibble: 6 x 19\n##    year month   day dep_time sched_dep_time dep_delay arr_time\n##   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n## 1  2013     1     1      517            515         2      830\n## 2  2013     1     1      533            529         4      850\n## 3  2013     1     1      542            540         2      923\n## 4  2013     1     1      544            545        -1     1004\n## 5  2013     1     1      554            600        -6      812\n## 6  2013     1     1      554            558        -4      740\n## # ... with 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;,\n## #   carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n## #   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;,\n## #   time_hour &lt;dttm&gt;\n<\/pre>\n<pre><code class=\"r\">dat &lt;- flights\na1 &lt;- dat %&gt;% select(carrier, origin, dest)\na2 &lt;- sqldf(&#39;SELECT carrier, origin, dest FROM dat&#39;)\nall.equal(a1, as_tibble(a2))\n<\/code><\/pre>\n<pre>## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% head(5))\nr2 &lt;- as_tibble(sqldf(&#39;SELECT * FROM dat LIMIT 5&#39;))\nall.equal(r1,r2)\n<\/code><\/pre>\n<pre>## # A tibble: 5 x 19\n##    year month   day dep_time sched_dep_time dep_delay arr_time\n##   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n## 1  2013     1     1      517            515         2      830\n## 2  2013     1     1      533            529         4      850\n## 3  2013     1     1      542            540         2      923\n## 4  2013     1     1      544            545        -1     1004\n## 5  2013     1     1      554            600        -6      812\n## # ... with 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;,\n## #   carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n## #   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;,\n## #   time_hour &lt;dttm&gt;\n## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% filter(dep_delay &gt; 1000)) %&gt;% head\nr2 &lt;- as_tibble(sqldf(&#39;SELECT * FROM dat WHERE dep_delay &gt; 1000&#39;)) \nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## # A tibble: 5 x 19\n##    year month   day dep_time sched_dep_time dep_delay arr_time\n##   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n## 1  2013     1     9      641            900      1301     1242\n## 2  2013     1    10     1121           1635      1126     1239\n## 3  2013     6    15     1432           1935      1137     1607\n## 4  2013     7    22      845           1600      1005     1044\n## 5  2013     9    20     1139           1845      1014     1457\n## # ... with 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;,\n## #   carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n## #   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;,\n## #   time_hour &lt;dttm&gt;\n## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% filter(dep_delay &gt; 1000 &amp; arr_time &lt; 1000)) %&gt;% head\nr2 &lt;- as_tibble(sqldf(&#39;SELECT * FROM dat WHERE dep_delay &gt; 1000 AND arr_time &lt; 1000&#39;)) %&gt;% head\nall.equal(r1,r2)\n<\/code><\/pre>\n<pre>## # A tibble: 0 x 19\n## # ... with 19 variables: year &lt;int&gt;, month &lt;int&gt;, day &lt;int&gt;,\n## #   dep_time &lt;int&gt;, sched_dep_time &lt;int&gt;, dep_delay &lt;dbl&gt;, arr_time &lt;int&gt;,\n## #   sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n## #   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;,\n## #   distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;\n## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% filter(is.na(tailnum))) %&gt;% head\nr2 &lt;- as_tibble(sqldf(&#39;SELECT * FROM dat WHERE tailnum IS NULL&#39;))\nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## # A tibble: 6 x 19\n##    year month   day dep_time sched_dep_time dep_delay arr_time\n##   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n## 1  2013     1     2       NA           1545        NA       NA\n## 2  2013     1     2       NA           1601        NA       NA\n## 3  2013     1     3       NA            857        NA       NA\n## 4  2013     1     3       NA            645        NA       NA\n## 5  2013     1     4       NA            845        NA       NA\n## 6  2013     1     4       NA           1830        NA       NA\n## # ... with 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;,\n## #   carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n## #   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;,\n## #   time_hour &lt;dttm&gt;\n## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% select(carrier) %&gt;% filter(!duplicated(carrier)))\nr2 &lt;- as_tibble(sqldf(&#39;SELECT DISTINCT carrier FROM dat&#39;))\nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## # A tibble: 16 x 1\n##    carrier\n##    &lt;chr&gt;  \n##  1 UA     \n##  2 AA     \n##  3 B6     \n##  4 DL     \n##  5 EV     \n##  6 MQ     \n##  7 US     \n##  8 WN     \n##  9 VX     \n## 10 FL     \n## 11 AS     \n## 12 9E     \n## 13 F9     \n## 14 HA     \n## 15 YV     \n## 16 OO     \n## [1] TRUE\n<\/pre>\n<p>\ub2e4\uc74c\uc758 \uacbd\uc6b0 \uacb0\uacfc\uc758 \ud615\ud0dc\uac00 \ub2e4\ub974\ub2e4\ub294 \uc810\uc744 \uc720\uc758\ud558\uc790(\uccab \ubc88\uc9f8 \uacb0\uacfc\ub294 \ubca1\ud130\uc774\uace0, \ub450 \ubc88\uc9f8 \uacb0\uacfc\ub294 \ud2f0\ube14\uc774\ub2e4).<\/p>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% select(carrier) %&gt;% filter(!duplicated(carrier)) %&gt;% nrow)\nr2 &lt;- as_tibble(sqldf(&#39;SELECT COUNT(DISTINCT carrier) FROM dat&#39;))\nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## [1] 16\n## [1] &quot;Modes: numeric, list&quot;                           \n## [2] &quot;names for current but not for target&quot;           \n## [3] &quot;Attributes: &lt; target is NULL, current is list &gt;&quot;\n## [4] &quot;target is numeric, current is tbl_df&quot;\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% transmute(speed = distance\/air_time)) %&gt;% head\nr2 &lt;- as_tibble(sqldf(&#39;SELECT distance\/air_time AS speed FROM dat&#39;)) \nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## # A tibble: 6 x 1\n##   speed\n##   &lt;dbl&gt;\n## 1  6.17\n## 2  6.24\n## 3  6.81\n## 4  8.61\n## 5  6.57\n## 6  4.79\n## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">library(stringr)\n(r1 &lt;- dat %&gt;% filter(str_detect(carrier, &quot;^B&quot;))) %&gt;% head\nr2 &lt;- as_tibble(sqldf(&quot;SELECT * FROM dat WHERE carrier LIKE &#39;B%&#39;&quot;))\nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## # A tibble: 6 x 19\n##    year month   day dep_time sched_dep_time dep_delay arr_time\n##   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n## 1  2013     1     1      544            545        -1     1004\n## 2  2013     1     1      555            600        -5      913\n## 3  2013     1     1      557            600        -3      838\n## 4  2013     1     1      558            600        -2      849\n## 5  2013     1     1      558            600        -2      853\n## 6  2013     1     1      559            559         0      702\n## # ... with 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;,\n## #   carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n## #   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;,\n## #   time_hour &lt;dttm&gt;\n## [1] TRUE\n<\/pre>\n<pre><code class=\"r\">(r1 &lt;- dat %&gt;% transmute(a = 8 %\/% 3)) %&gt;% head\nr2 &lt;- as_tibble(sqldf(&#39;SELECT (8\/3) AS a FROM dat&#39;))\nall.equal(r1, r2)\n<\/code><\/pre>\n<pre>## # A tibble: 6 x 1\n##       a\n##   &lt;dbl&gt;\n## 1     2\n## 2     2\n## 3     2\n## 4     2\n## 5     2\n## 6     2\n## [1] &quot;Incompatible type for column `a`: x numeric, y integer&quot;\n<\/pre>\n<hr\/>\n<h2><code>dbplyr<\/code> \ud328\ud0a4\uc9c0\ub97c \uc0ac\uc6a9\ud55c \uc790\ub3d9 \ubc88\uc5ed<\/h2>\n<p><code>dbplyr<\/code>\uc740 dplyr -&gt; SQL \ubc88\uc5ed\uc744 \uc790\ub3d9\uc73c\ub85c \ud574 \uc900\ub2e4. <a href=\"https:\/\/dbplyr.tidyverse.org\/articles\/sql-translation.html\">\uad00\ub828\ub9c1\ud06c: sql-translation<\/a><\/p>\n<p>\ub2e8\uc21c\ud55c \uc608\ub97c \ub4e4\uc5b4 \ubcf4\uc790. \uc704\uc758 \ub9c1\ud06c\uc5d0\uc11c \uac00\uc838\uc654\ub2e4.<\/p>\n<pre><code class=\"r\">con &lt;- DBI::dbConnect(RSQLite::SQLite(), &quot;:memory:&quot;)\nflights &lt;- copy_to(con, nycflights13::flights)\nairports &lt;- copy_to(con, nycflights13::airports)\n<\/code><\/pre>\n<pre><code class=\"r\">flights %&gt;%\n  select(contains(&quot;delay&quot;)) %&gt;%\n  show_query()\n<\/code><\/pre>\n<pre>## &lt;SQL&gt;\n## SELECT `dep_delay`, `arr_delay`\n## FROM `nycflights13::flights`\n<\/pre>\n<p>\uacb0\uacfc\ub97c \uc2e4\uc81c \ud65c\uc6a9\ud574 \ubcf4\uba74,<\/p>\n<pre><code class=\"r\">DBI::dbGetQuery(con, &#39;SELECT `dep_delay`, `arr_delay` FROM `nycflights13::flights`&#39;) %&gt;% head\n<\/code><\/pre>\n<pre>##   dep_delay arr_delay\n## 1         2        11\n## 2         4        20\n## 3         2        33\n## 4        -1       -18\n## 5        -6       -25\n## 6        -4        12\n<\/pre>\n<h3>\uc2e4\ub840<\/h3>\n<ul>\n<li><code>flights.db<\/code> \uc0dd\uc131<\/li>\n<\/ul>\n<pre><code class=\"r\">dbFilename &lt;- &quot;flights.db&quot;\nif (file.exists(dbFilename)) file.remove(dbFilename)\ncon2 &lt;- DBI::dbConnect(drv=SQLite(), dbname=dbFilename)\ndbListTables(con2)\ndata(flights)\ndbWriteTable(con2, &quot;flights&quot;, flights)\ndbListTables(con2)\ndbDisconnect(con2)\n<\/code><\/pre>\n<ul>\n<li>\uc704\uc5d0\uc11c \ubc88\uc5ed\ub41c SQL\ubb38 \uc0ac\uc6a9<\/li>\n<\/ul>\n<pre><code class=\"r\">con2 &lt;- DBI::dbConnect(drv=SQLite(), dbname=dbFilename)\nDBI::dbGetQuery(con2, &#39;SELECT `dep_delay`, `arr_delay` FROM flights&#39;) %&gt;% head\ndbDisconnect(con2)\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>install.packages(dplyr) install.packages(nycflights13) install.packages(sqldf) #install.packages(&#39;RSQLite&#39;) dplyr\uc744 SQL\ub85c \ubc88\uc5ed\ud558\uae30 \ub370\uc774\ud130 \ubd84\uc11d\uac00\uc5d0\uac8c \ud544\uc694\ud55c \uc5ed\ub7c9 \uc911\uc758 \ud558\ub098\uac00 SQL(Structured Query Language)\uc774\ub2e4. \ud558\uc9c0\ub9cc \uc2dc\uac04\uc744 \ub0b4\uc5b4 \ubc30\uc6b0\uae30 \ud798\ub4e4\uace0, \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud574\uc57c \ud560 \ud544\uc694\uac00 \uc788\uc744 \ub54c\uc5d0\ub294 \uac04\ub2e8\ud558\uac8c dplyr \ud568\uc218\ub97c \ubc88\uc5ed\ud574\uc11c \uc4f8 \uc218 \uc788\ub2e4. \uc544\ub798\uc5d0\ub294 \uc218\uae30\ub85c \ud558\ub294 \ubc88\uc5ed\uacfc dbplyr\uc758 \ud568\uc218\ub97c \ud65c\uc6a9\ud558\uc5ec \uc790\ub3d9\uc73c\ub85c \ubc88\uc5ed\ud558\ub294 \ubc29\ubc95\uc744 \uc18c\uac1c\ud55c\ub2e4. \uc218\uae30 \ubc88\uc5ed \uc544\ub798\uc758 \ud45c\ub294 dplyr\uc758 \ub300\ud45c\uc801\uc778 \ud568\uc218\ub97c SQL\ub85c \ubc88\uc5ed\ud55c \uacb0\uacfc\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1079,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[28,179],"tags":[184,224],"jetpack_featured_media_url":"http:\/\/ds.sumeun.org\/wp-content\/uploads\/2019\/04\/SQL.png","_links":{"self":[{"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/posts\/1071"}],"collection":[{"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1071"}],"version-history":[{"count":8,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/posts\/1071\/revisions"}],"predecessor-version":[{"id":1081,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/posts\/1071\/revisions\/1081"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=\/wp\/v2\/media\/1079"}],"wp:attachment":[{"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1071"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ds.sumeun.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}