sum(coun(*)), count(count(*)) 처럼 nested 함수를 사용해야 하는데요
이것을 대체할 수 있는 함수가 있나요
SELECT NVL(MAX(ID), 100) FROM TEST
NVL처럼 max값과 100을 비교해서 더 큰숫자를 찾고 싶은데
이런 함수도 있을까요?
대체 할수 있는 함수는 없습니다.
만약 그런 함수를 계속 사용해야 한다면 엄청나게 퍼포먼스를 떨어뜨리는 결과가 될것입니다. 그럴 경우에는 다른 방법을 강구해봐야 합니다.
예를 들면 테이블의 정보를 (count(*) 와 같은) 미리 다른 테이블 등에 저장해 두는 방법을 사용해야 합니다. 물론 테이블로 저장하는 것은 RULE 이나 또는 TRIGGER 등을 이용하는 것이 좋겠지요. 그럼 수작업을 피할수 있을것이니 말이죠.
그리고 NVL(...) 함수는 그 값이 NULL 일때 다른 값으로 치환해라는 의미의 함수입니다.
즉 select NVL(id, 100) 이렇게 하면 id 라는 column 값을 가져 오는데 만약 id col 값이 NULL 이라면 그 값을 100으로 설정해서 selection 해라는 뜻이 되죠.
PostgreSQL 에서 NVL 함수를 구현할려면 다음과 같이 해야 합니다.
select (CASE when id is null then 100 else id) as col_name from table_name;
만약 max 값과 100을 비교해서 더 큰 값을 가져오고 싶다면 CASE 구문을 이용해야 합니다.
select (CASE when max(id)>=100 then max(id) else 100) as col_name from table_name;
CASE 구문을 잘 익혀 두시면 여러가지 응용이 가능하며 오라클에는 있으나 PostgreSQL 에서는 지원되지 않는 여러가지 함수들을 손쉽게 구현할수 있습니다. (예를 들면 DECODE 등등)
도움이 되셨길 바랍니다.
캑~~
정신차리고 아침에 보니 Query 문이 틀렸군요. 다음과 같이 수정해 주세요. CASE 문 마지막에 end 가 빠졌네요.
select (CASE when id is null then 100 else id END) as col_name from table_name;
select (CASE when max(id)>=100 then max(id) else 100 END) as col_name from table_name;