Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
실전 SQL 문법 : 문자열쪼개기와 CASE문, IF문 본문
2023.10.06 - [SQL] - Subquery의 select, where, from 절 비교 예제, With절 예제
1. 문자열
1) SUBSTRING_INDEX() : 문자열 쪼개보기
SUBSTRING_INDEX(string, delimiter, count)
--
string: 원본 문자열입니다.
delimiter: 구분자입니다. 문자열을 나눌 때 사용됩니다.
count: 구분자를 기준으로 몇 번째 나눌 것인지를 나타내는 정수입니다.
SELECT SUBSTRING_INDEX('apple,banana,cherry', ',', 2); -- 'apple,banana'
SELECT SUBSTRING_INDEX('apple,banana,cherry', ',', -1); -- 'cherry'
이메일 주소에서 @앞의 아이디만 가져오거나, @뒤의 이메일 도메인을 가져오고 싶어요!
select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users -- @앞쪽에있는 이메일만
select user_id, email, SUBSTRING_INDEX(email, '@', -1) from users --@뒤쪽에있는 도메일만
2) SUBSTR(), SUBSTRING() : 문자열 일부만 출력하기
SUBSTR(string, start, length)
--
string: 원본 문자열입니다.
start: 추출을 시작할 위치를 나타내는 정수입니다. 첫 번째 문자는 1로 시작합니다.
length (선택 사항): 추출할 문자의 길이입니다. 이 파라미터를 생략하면 start 위치부터 문자열 끝까지 추출됩니다.
SELECT SUBSTR('Hello, World!', 1, 5); -- 'Hello'
SELECT SUBSTR('Hello, World!', 8); -- 'World!'
DATETIME데이터에서 날짜랑 시간을 구분해서 가져오고 싶어요!
SELECT SUBSTR(DATETIME,1,10) AS DATE, SUBSTR(DATETIME,11,7) AS TIME
FROM ANIMAL_INS;
[예제] 일별로 몇 개씩 주문이 일어났는지 살펴보기
select substring(created_at,1,10) as date, count(*) as cnt_date
from orders
group by date
2. 조건부 로직
1) CASE WHEN THEN ELSE END : 조건부로 값을 선택하고 반환하려는 경우에 사용
여러 조건에 대한 처리를 구조적으로 표현하는 데 더 적합합니다.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
--
condition1, condition2, ...: 조건이며, 참인 경우 해당 결과가 선택됩니다.
result1, result2, ...: 조건에 따라 선택된 결과 값입니다.
ELSE resultN: 모든 조건이 거짓인 경우 선택되는 기본값입니다
-- score 값에 따라 학점을 부여하는 경우
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'F'
END AS grade
FROM students;
10000점보다 높은 포인트를 가지고 있으면 '잘 하고 있어요!', 낮으면 '조금 더 달려주세요!' 라고 표시해보세요!
select pu.point_user_id, pu.point,
(case
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END) as msg
from point_users pu;
2) IF() : 조건을 평가하고 결과 값을 선택하는 데 사용
간단한 조건에 따라 값을 선택하는 데 유용합니다.
IF(condition, true_value, false_value)
--
condition: 조건이며, 참 또는 거짓을 평가하는 데 사용됩니다.
true_value: 조건이 참일 때 선택되는 값입니다.
false_value: 조건이 거짓일 때 선택되는 값입니다.
SELECT
IF(score >= 90, 'A',
IF(score >= 80, 'B',
IF(score >= 70, 'C', 'F'))) AS grade
FROM students;
👉 [실습예제1-1] 포인트를 구분지어서 출력해보겠습니다
select pu.point_user_id, pu.point,
case
when pu.point >= 10000 then '1만 이상'
when pu.point >= 5000 then '5천 이상'
else '5천 미만'
END as level
from point_users pu
👉 [실습예제1-2] 포인트대를 나눈 구분별로 통계를 내주세요!
select pu.point, count(*) as cnt
from
(
select pu.point_user_id, pu.point,
case
when pu.point >= 10000 then '1만 이상'
when pu.point >= 5000 then '5천 이상'
else '5천 미만'
END as level
from point_users pu
) a
group by level
👉 [실습예제1-3] with절을 사용해서 위의 쿼리를 나눠보세요!
with table1 as
(
select pu.point_user_id, pu.point,
case
when pu.point >= 10000 then '1만 이상'
when pu.point >= 5000 then '5천 이상'
else '5천 미만'
END as level
from point_users pu
)
select pu.point, count(*) as cnt
from table1 a
group by level
👉 [실습예제2-1] 평균 이상 포인트를 가지고 있으면 '잘 하고 있어요' / 낮으면 '열심히 합시다!' 표시하기!
select pu.point_user_id,
pu.point,
case
when pu.point >
(
select avg(pu2.point)
from point_users pu2
) then '잘 하고 있어요!'
else '열심히 합시다!'
end as 'msg'
from point_users pu
👉 [실습예제3-1] 이메일 도메인별 유저의 수 세어보기
select domain, count(*) as cnt from (
select SUBSTRING_INDEX(email,'@',-1) as domain from users
) a
group by domain
'Database' 카테고리의 다른 글
맥북 M2 mysql 도커 설치 및 workbench 설치 (0) | 2023.10.14 |
---|---|
Subquery의 select, where, from 절 비교 예제, With절 예제 (1) | 2023.10.06 |