SQL 조회 중 DECODE 함수 와 CASE WHEN 비교
1, DECODE 함수
그 기본 문법 은 다음 과 같다.
Sql 코드
DECODE(value, if1, then1, if2, then2, if3, then3,...ifn, thenn, else)
DECODE(value, if1, then1, if2, then2, if3, then3,...ifn, thenn, else)
value 가 if1 과 같 을 때 DECODE 함수 의 결 과 는 then 1 로 되 돌아 가 고, if 값 과 같 지 않 으 면 else 로 되 돌아 가 는 것 을 나타 낸다.즉, decode (조건, 값 1, 번역 값 1, 값 2, 번역 값 2,... 값 n, 번역 값 n, 결 성 값)
확장 방법:
1. sign 함수 와 의 연결 크기 비교:
Sql 코드
select decode(sign(arg1-arg2),-1, arg1, arg2) from dual; --get arg1 arg2
select decode(sign(arg1-arg2),-1, arg1, arg2) from dual; --get arg1 arg2
Sql 코드
select decode(sign(3-5),1 ,3, 5) from dual
select decode(sign(3-5),1 ,3, 5) from dual
주: sign () 함 수 는 특정한 값 이 0, 양수 인지 음수 인지 에 따라 각각 0, 1, - 1 을 되 돌려 줍 니 다.
2. 표, 보기 구조 전환:
기본 사고방식: substrb 함 수 를 사용 하여 필드 에 대한 판단 을 실현 한 다음 에 decode 함수 로 데 이 터 를 다시 계산 하고 새로운 데 이 터 를 생 성하 고 새로운 테이블 (table or view) 을 구성한다.
둘째, 케이스 는
그 문법 은 다음 과 같다.
Sql 코드
SELECT <myColumnSpec> =
CASE WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE> END
SELECT <myColumnSpec> =
CASE WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE> END
selection 에서 CASE 를 사용 할 수 있 는 것 을 제외 하고 where 자구, group by 자구, order by 자구 모두 사용 할 수 있 습 니 다.
Sql 코드
SELECT CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS "Range",
Title
FROM titles
where
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives' END in('Average','Bargain')
GROUP BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives' END,
Title
ORDER BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,Title
SELECT CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS "Range",
Title
FROM titles
where
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives' END in('Average','Bargain')
GROUP BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives' END,
Title
ORDER BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,Title
rm_site_master 표 구조:
rma_center | name
---------------------------
123 |qw
23 |ASde
45 |sssdf
55 |e3fbg
55555 |adfv
22221 |sdfsfe
4 |sdfeg
579 |lojgdex
Sql 코드
select name,
CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END AS "RMA CENTER Type"
from rm_site_master
where CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END in('30~100','>1000')
group by CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END,
name
order by CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END,
name
select name,
CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END AS "RMA CENTER Type"
from rm_site_master
where CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END in('30~100','>1000')
group by CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END,
name
order by CASE
WHEN rma_center IS NULL THEN 'Null'
WHEN rma_center > 1000 THEN '>1000'
WHEN rma_center BETWEEN 30 and 100 THEN '30~100'
ELSE 'Gift to impress relatives' END,
name
3. DECODE 와 CASE WHEN 의 비교
1,DECODE Oracle 특유; 2,CASE WHEN Oracle , SQL Server, MySQL 모두 사용 가능;3. DECODE 는 똑 같은 판단 만 할 수 있 지만 sign 함수 에 맞추어 크 고 작 으 며 같은 판단 을 할 수 있 습 니 다. CASE 는 =, > =, <, < =, < >, is null, is not null 등의 판단 에 사용 할 수 있 습 니 다.
4. DECODE 는 간결 하 게 사용 하고 CASE 는 복잡 하지만 유연성 이 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.