inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

ELT 함수와 FIELD함수 질문입니다.

해결된 질문

313

deeir

작성한 질문수 5

0

함수 개념과 기능이 상이하여 질문드립니다.

ELT()함수는 나열된 값 중에서 지정한 위치의 값을 반환하는 함수이고,

FIELD()함수는 나열된 값 중에서 지정한 값이 있는 위치를 반환하는 함수라고 배웠습니다.

 

그런데 ELT()함수 기능 자체에는 지정한 위치의 값을 반환하는 것이지, 값을 변경하는 함수가 아닌데

ELT(NTILE(3) OVER(ORDER BY salary DESC), '상', '중', '하') AS grp

해당 코드를 통해 1은 '상', 2는 '중', 3은 '하'로 변경됩니다.

(NTILE(3) OVER(ORDER BY salary DESC), '상', '중', '하'로 인해 이름이 바뀌는 것이라고 해도, ELT자체는 특정 위치의 값을 호출하는 함수인데, 지정 위치 숫자도 없고, 어떻게 이런 결과가 가능한지 이해가 안 갑니다!)

 

또한 FIELD()함수 기능 자체에는 위치를 반환하는 것이지, 호출 순서를 나열하는 것이 아닌데,

ORDER BY FIELD(dept_id, 'MKT', 'HRD', 'SYS')

해당 코드를 통해 'MKT', 'HRD', 'SYS' 순서로 데이터가 호출됩니다.

(ORDER BY에 의해 순서가 정렬되는 것이라고 해도, FIELD자체는 위치를 호출하는 함수인데, 어떻게 이런 결과가 가능한지 이해가 안 갑니다!)

 

ELT()와 FIELD()함수 자체는 각각 위치의 값을 반환하는 기능, 위치를 반환하는 기능이 있으나,

ELT()는 값을 변경할 수 있고,

FIELD는 호출 순서를 지정할 수 있는 기능이 있다고 추가적으로 이해하면 되는 걸까요??

sql mysql oracle dbms/rdbms mssql

답변 1

0

장래쌤

안녕하세요?

말씀하신 대로 ‘ELT() 함수는 지정한 위치의 값을 반환하는 함수’입니다. 그래서 ELT(1, ’상’, ‘중’, ‘하’)로 하면 ‘상’, ‘중’, ‘하’ 중 첫 번째 값인 ‘상’이 반환되고, ELT(2, ’상’, ‘중’, ‘하’)로 하면 ‘중’이 반환됩니다. NTILE(3) OVER(ORDER BY salary DESC)은 3등분한 결과를 반환하므로 1, 2, 3 중 하나를 반환하게 됩니다. 만일 NTILE(3) OVER(ORDER BY salary DESC) 구문이 1을 반환하면 ELT(NTILE(3) OVER(ORDER BY salary DESC), ’상’, ‘중’, ‘하’)은 ELT(1, ’상’, ‘중’, ‘하’)과 같이 되어 ‘상’이 반환됩니다. 질문에서 ‘지정 위치 숫자도 없고’ 라고 하셨는데, ELT()함수 맨 앞에 사용된 NTILE() 함수 부분이 위치 숫자를 반환해 줍니다.

또한 말씀하신 대로 ‘FIELD() 함수는 위치를 반환하는 함수’입니다. ORDER BY FIELD(dept_id, 'MKT', 'HRD', 'SYS') 구문에서 FIELD() 함수가 사용된 FIELD(dept_id, 'MKT', 'HRD', 'SYS') 부분은 dept_id 열의 값이 ‘MKT’ 이면 1, ‘HRD’이면 2, ‘SYS’이면 3을 반환합니다. 이렇게 반환된 1, 2, 3 숫자를 기준으로 정렬하라고 ORDER BY 문에 사용한 것입니다. 즉, dept_id 열의 값 'MKT', 'HRD', 'SYS' 를 각각 1, 2, 3이라고 간주하고 정렬하라는 의미로 해석할 수 있습니다. 혹시 이해가 안되는 부분이 있으면 다시 질문해 주시기 바랍니다.

질문해 주셔서 감사합니다~

0

deeir

감사합니다! 잘 이해됐습니다 🙂

간단한 오타 제보입니다.

0

3

0

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

19

1

실제 FK제약조건을 설정하지 않는이유

0

19

1

create view

0

121

2

json 배열 파싱

0

185

2

insert into 구문

0

171

2

PDF 자료 문의

0

140

2

집계 연산자에 대한 질문

0

125

1

array_agg 배열 해제

0

196

2

null 수강 관련 문의

0

108

1

테이블 생성 후 조건 수정 방법

0

265

2

주차별 데이터에서 전 주 데이터 가져오기

0

180

1

여러 컬럼 중 null값이 아닌 값 가져오기

0

428

1

누적 백분위 구하기 질문

0

731

1

Join 질문

0

174

1

pdf 문의드립니다

1

188

1

regexp like 에 특정 특수기호 포함

1

356

1

컬럼 안 공백 문자열 제외

1

226

1

USING 조인 질문드립니다.

0

312

2

JOIN함수 질문입니다.

1

261

1

뷰 변경 질문입니다.

0

335

2

[질문] 3. '다양한 데이터 집계 _ 심각할 수 있는 집계 함수와 NULL값의 관계' 수업 내용 질문

0

224

1

대문자 질문입니다!

0

206

1

mysql 설치 오류로 학습 불가

0

234

1