갑자기 PostgreSQL로 구성된 DB에서 자료를 추출하여 분석을 해야하는 연구를 해야합니다. ㅠㅠ
인터넷 검색을 통하여 원하는 조건을 검색하는 스크립트(?)는 작성하였습니다.
SELECT DISTINCT person_id
FROM hlud.condition_occurrence
WHERE (condition_source_value LIKE '%A15%'
OR condition_source_value LIKE '%A16%'
OR condition_source_value LIKE '%A17%'
OR condition_source_value LIKE '%A18%'
OR condition_source_value LIKE '%A19%')
hlud 스키마의 condition_occurrence 테이블의 condition_source_value 컬럼에서 A15~A19 단어가 포함된 것중 중복값을 제외한 person_id를 구하였습니다.
질문은 2개입니다.
첫번째로 여기서 검색된 person_id 는 다른 테이블에도 있는데요, 이 person_id가 있는 다른 테이블의 자료를 선택하기 위해서는 어떻게 해야하는지요?
두번째로 선택된 테이블 정보를 R에서 불러와서 분석을 진행할 것인데 어떻게 해야 DB의 자료를 R로 넘길 수 있는지 궁금합니다.
감사합니다.
추신: 연구비에서 제 인건비를 받게 된다면 소정의 사례를 하겠습니다.
2. psql ¿¡¼ Äõ¸® °á°ú¸¦ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ¿É¼ÇÀÌ ÀÖÀ»°Ì´Ï´Ù.
FROM hlud.condition_occurrence A inner join huld.tmp_table B on A.person_id=B.person_id
where (A.condition_source_value LIKE '%A15%' OR A.condition_source_value LIKE '%A16%'
OR A.condition_source_value LIKE '%A17%' OR A.condition_source_value LIKE '%A18%'
OR A.condition_source_value LIKE '%A19%')
group by a.person_id,º¸ÀÌ°í°í½ÍÀº Ä÷³¸í
--------------------------
ÀÌ·±½ÄÀ¸·Î ÇÏ½Ã¸é µÉ°Å°í like º¸´Ù´Â in ('A15','A16') ÀÌ·±½ÄÀÌ Äõ¸®°á°ú´Â ºü¸¦°Ì´Ï´Ù.
¹®Á¦´Â A15, A16 °ªµé ¾ÐµÚ·Î ÀÚ¸®¼ö°¡ °°À¸¸é substring °°Àº ÇÔ¼ö·Î »Ì¾Æ¼ INÀ» »ç¿ëÇϽñ⠹ٶø´Ï´Ù.
ÂüÁ¶ -> https://lee-mandu.tistory.com/431
substring(condition_source_value,2,3) in ('A15','A16) ÀÌ·±½Ä ¼ýÀÚ·Î Á¶Á¤ °¡´ÉÇÑ ±¸Á¶ÀÎÁö ÆľÇÇÊ¿ä
select A.id, B.id from tablenameA as A, tablenameB as B where A.id=B.id
´ëÃæ ÀÌ·±½ÄÀÌ µÉµí
2. Äõ¸®¹®À» °¡Áö°í ³»º¸³»±â³ª ÀÚ·á »ý¼ºÀ» ÇÒ¼ö ÀÖ´Â ÅøÀÌ ÀÖÀ»°Ì´Ï´Ù
Á¦°¡ ÁÖÁ¾¸ñÀÌ ms sqlÀ̶ó Á¤È®ÇÏÁö´Â ¾Ê°ÚÁö¸¸ ´ë´Ù¼ö µðºñµéº¸Åë Äõ¸®¹®Àº Ç¥ÁؽÄÀ¸·Î ºñ½ÁÇÕ´Ï´Ù
from ´Ù¸¥ Å×À̺í
where person_id in (
SELECT DISTINCT person_id
FROM hlud.condition_occurrence
WHERE (condition_source_value LIKE '%A15%'
OR condition_source_value LIKE '%A16%'
OR condition_source_value LIKE '%A17%'
OR condition_source_value LIKE '%A18%'
OR condition_source_value LIKE '%A19%')
group by person_id
)
¿À¶óŬ¿¡¼´Â ÀÌ·¸°Ô ó¸®Çß¾ú´Âµ¥...
¾Æ´Ô joinÀ¸·Î..
1¹ø ¹®Á¦´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ÇØ°áÇÏ¿´½À´Ï´Ù.
select * from hlud.visit_occurrence where person_id in (
SELECT DISTINCT person_id
FROM hlud.condition_occurrence
WHERE substring(condition_source_value, 1, 3) in ('A15', 'A16', 'A17', 'A18', 'A19')
)
SELECT *
FROM hlud.visit_occurrence
WHERE person_id IN (
SELECT person_id
FROM hlud.condition_occurrence
WHERE condition_source_value SIMILAR TO 'A1(5|6|7|8|9)%'
)
ÀÌ·±½ÄÀ¸·Î ¹Ù²ãº¸¼¼¿ä.
INDEX°¡ ÀÖ´Ù¸é Äõ¸® ¼Óµµ°¡ »¡¶óÁü.
²À ÇÊ¿äÇÑ °æ¿ì°¡ ¾Æ´Ï¸é °Ë»öÇÏ´Â Ä÷³À» Á¶ÀÛÇÏ´Â ÇÔ¼ö´Â ¾È¾²°í
Äõ¸®¸¦ ÀÛ¼ºÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù.
FROM ´Ù¸¥Å×À̺í
WHERE person_id IN (
SELECT person_id
FROM hlud.condition_occurrence
WHERE condition_source_value SIMILAR TO '%A1(5|6|7|8|9)%'
)
ÀÌ·±½Ä ÀÔ´Ï´Ù.
Á¦°¡ PostgreSQL´Â »ç¿ëÇØ º¸Áö ¾Ê¾Æ¼ ÆÐÅÏ°Ë»öÀ» Àß ¸ð¸£´Âµ¥
ÆÐÅÏ°Ë»öÀ» »ç¿ëÇϸé À§ Äõ¸®¸¦ ´õ °£´ÜÇÏ°Ô ¹Ù²Ü¼ö ÀÖÀ» °Å¿¹¿ä.
WHERE condition_source_value SIMILAR TO '(A15|A16|A17|A18|A19)%'
ÀÌ·±½ÄÀ¸·Î Áúº´Äڵ带 ³ª¿ÇÏ½Ã¸é µË´Ï´Ù.