모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🐬CASE
데이터에서 원하는 내용을 가져올 때, CASE 구문을 사용해서 조건을 만들어줄 수 있습니다.
코드를 보는 게 이해가 좀 더 빠를 것 같아, 바로 확인해보겠습니다.
Products 테이블의 CategoryID 열에 대해 조건문을 만든 후, CASE 문의 이름을 별칭을 만들어 가져오는 쿼리입니다.
CASE 문은 SELECT 절 내에서 정의하며,
CASE '열' -> WHEN '조건' THEN '가져올 이름' -> ELSE -> END 의 순서로 쿼리를 작성합니다.
SELECT 문 내에서 정의하기 때문에, 별칭 설정과 가져오는 열 설정도 가능합니다.
SELECT CASE
WHEN CategoryID = 1 THEN '음료'
WHEN CategoryID = 2 THEN '조미료'
ELSE '기타'
END AS 'category_NAME', *
FROM Products;
또한 AND, OR 와 같은 논리연산자를 사용해서 두 가지 조건을 사용할 수도 있습니다.
아래 쿼리는, CategoryID가 1이고 SupplierID가 1인 경우에는 '음료'라는 category_NAME 을 지정하고 가져옵니다.
SELECT CASE
WHEN CategoryID = 1 AND SupplierID = 1 THEN '음료'
WHEN CategoryID = 2 THEN '조미료'
ELSE '기타'
END AS 'category_NAME', *
FROM Products;
반면에, CategoryID가 1이지만 SupplierID는 1이 아닌 행의 경우 category_NAME 열이 '기타'인 것을 확인할 수 있습니다.
CASE 문을 사용해 새로운 열을 하나 만들어주고, 해당 열을 기준으로 GROUP BY 절을 사용할 수도 있습니다.
CategoryID에 따라 새로운 카테고리 명을 지정해주고, 새롭게 지정한 카테고리 상품 가격의 평균을 계산하는 쿼리입니다.
SELECT CASE
WHEN CategoryID = 1 THEN '음료'
WHEN CategoryID = 2 THEN '소스'
ELSE '이외'
END AS new_category, AVG(Price)
FROM Products
GROUP BY new_category;
위 쿼리의 실행결과, 하나의 열에는 새로운 카테고리가, 다른 열에는 평균 가격이 표시된 테이블이 만들어졌습니다.
이때, 각 열을 각각의 카테고리로 설정하고, 행에는 평균 가격이 표시되도록 하고 싶습니다.
파이썬에서는 pivot_table( ) 함수를 사용해서 구현하는데, sql에서도 CASE 문을 사용해 만들 수 있습니다.
SELECT AVG(CASE WHEN CategoryID = 1 THEN Price ELSE NULL END) AS category1_price,
AVG(CASE WHEN CategoryID = 2 THEN Price ELSE NULL END) AS category2_price,
AVG(CASE WHEN CategoryID >= 3 THEN Price ELSE NULL END) AS category3_price
FROM Products;
'🐬 SQL > ✏️ 이론' 카테고리의 다른 글
✏️ 10. OUTER JOIN (0) | 2023.06.28 |
---|---|
✏️ 09. INNER JOIN (0) | 2023.06.27 |
✏️ 07. GROUP BY, HAVING (0) | 2023.06.25 |
✏️ 06. 집계함수 (0) | 2023.06.25 |
✏️ 05. 데이터 순서 정렬하기 (0) | 2023.06.12 |