2019년 9월 5일 목요일

SQL: JOIN

animal_outs 테이블에는 있지만 animal_ins 테이블에는 없는 데이터를 조회하고 싶은 경우 아래 코드를 실행하면 된다.

1
2
3
4
5
SELECT outs.animal_id, outs.name
FROM animal_ins ins
RIGHT JOIN animal_outs outs ON ins.animal_id = outs.animal_id
WHERE ins.animal_id is null
-- animal_outs에는 있지만 animal_ins에는 없는 데이터를 추출하는 조건
ORDER BY outs.animal_id;
cs

2019년 9월 4일 수요일

SQL: HAVING

아래의 코드는 animal_ins 테이블에서 name 열을 기준으로 name count가 2 이상인 경우에만 그룹핑을 한 다음  name열과 name count를 조회한다.

1
2
3
4
SELECT name, count(name) count
FROM animal_ins
GROUP BY name
HAVING count > 1;
cs

'name count가 2 이상' 조건을 사용하기 위해 WHERE 절을 사용할 수 있겠다고 생각하여 아래의 코드를 작성하였습니다.

1
2
3
4
SELECT name, count(name) count
FROM animal_ins
WHERE count > 1
GROUP BY name;
cs

하지만 아래의 에러가 발생하였습니다. WHERE 절에서는 SELECT 절에서 설정한 열의 별명을 사용할 수 없었습니다.

SQL 실행 중 오류가 발생하였습니다.
Unknown column 'count' in 'where clause'

그래서 별명 count를 사용하지 않고 count(name)을 사용하여 아래의 코드를 작성하였습니다.

1
2
3
4
SELECT name, count(name) count
FROM animal_ins
WHERE count(name) > 1
GROUP BY name;
cs

하지만 아래의 에러가 발생하였습니다. WHERE 절에서는 count와 같은 그룹핑 함수를 사용할 수 없었습니다.

SQL 실행 중 오류가 발생하였습니다.
Invalid use of group function

위와 같은 과정을 통해 HAVING 절과 WHERE 절의 역할을 이해할 수 있었습니다. 그룹핑 함수를 이용하여 조건을 적용하고 싶다면 HAVING을 사용해야 합니다.

2019년 9월 3일 화요일

SQL: 최솟값 구하기

아래의 코드는 datetime의 최솟값을 조회합니다.
1
2
SELECT min(datetime)
FROM animal_ins;
cs

SELECT 절에서 min(열의 이름)을 사용하여 특정 열의 최솟값을 조회할 수 있습니다.

SQL: 특정 열의 NULL 조회하기

아래 코드는 animal_ins 테이블에서 name이 NULL인 데이터의 animal_id를 조회할 수 있다.
1
2
3
SELECT animal_id
FROM animal_ins
WHERE name is null
cs

특정 열의 NULL 값을 조회하려면 WHERE 절에서
'열 이름 is null'
을 작성하면 된다.
1
2
3
SELECT *
FROM 테이블의 이름
WHERE 열의 이름 is null
cs

만약 NULL 값을 제외한 데이터를 조회하려면
'열 이름 is not null'
을 작성하면 된다.
1
2
3
SELECT *
FROM 테이블의 이름
WHERE 열의 이름 is not null
cs

2019년 8월 25일 일요일

R: 함수의 소스 코드를 보고 싶을 때

문자 커서를 함수에 위치시킨 다음

키보드의 F2 키를 누르면 함수의 소스 코드가 함수 이름의 새 탭으로 열립니다.

혹은 콘솔 창에 함수 이름을 괄호 없이 입력하면 소스 코드를 확인할 수 있습니다.

2019년 7월 3일 수요일

R: if문

1.
1
2
3
4
5
6
7
8
9
> x <- 6
> if (x %% 2 == 0) {
+     print("divisible by 2")
+ } else if (x %% 3 == 0) {
+     print("divisible by 3")
+ } else {
+     print("not divisible by 2 nor by 3...")
+ }
[1] "divisible by 2"
cs
두번째(else if문) 조건이 참이더라도 첫번째(if문) 조건이 참일 경우 첫번째 then절을 실행하고 if문을 종료한다.

2019년 7월 2일 화요일

R: Rtools을 설치했는데 rstudio에서 rtools를 인식하지 못하는 경우

1
2
Sys.setenv(PATH = paste("rtools을 설치한 경로; ... /Rtools/bin/", Sys.getenv("PATH"), sep = ";"))
Sys.setenv(BINPREF = "rtools을 설치한 경로; .../Rtools/mingw_ 시스템 종류, 64비트 운영 체제일 경우; 64/bin/")
cs

위 명령어를 실행하면 rtools를 설치한 디렉토리가 환경 변수에 추가되어 rstudio에서 rtools을 인식할 수 있게 된다.