해결된 질문
작성
·
160
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는 호출 순서를 지정할 수 있는 기능이 있다고 추가적으로 이해하면 되는 걸까요??
답변 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이라고 간주하고 정렬하라는 의미로 해석할 수 있습니다. 혹시 이해가 안되는 부분이 있으면 다시 질문해 주시기 바랍니다.
질문해 주셔서 감사합니다~
감사합니다! 잘 이해됐습니다 🙂