https://school.programmers.co.kr/learn/courses/30/lessons/151137
-- CASE WHEN절 내부에는 SELECT절을 사용할 수 없다
-- GROUP BY절에서는 별칭을 사용할 수 없다
-- CASE WHEN 절을 새로운 테이블로 사용하자
SELECT CAR_TYPE, COUNT(CAR_TYPE) CARS
FROM(SELECT
CASE
WHEN OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%'
THEN CAR_TYPE
-- else 값을 안 쓰면 기본값 ELSE NULL
END AS CAR_TYPE
FROM CAR_RENTAL_COMPANY_CAR)
GROUP BY CAR_TYPE
ORDER BY CARS DESC;
이렇게 짰더니
비어있는 열 뭐냐고....
뭐냐면 ELSE NULL의 의미는 없으면 NULL을 넣겠다는 의미 -> 빈공백을 카운트하게 되는 것이다
하참내 그래서 이 열을 없앨 수 없고 새로운 방법을 택해야 함 바로 숫자더하기
SELECT CAR_TYPE, SUM(OPP) AS CARS
FROM(SELECT CASE
WHEN OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%'
THEN OP + 1
ELSE OP + 0
END AS OPP,
CAR_TYPE
FROM (SELECT CAR_TYPE, 0 AS OP, OPTIONS
FROM CAR_RENTAL_COMPANY_CAR) CA
)
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
0 AS OP 라는 0으로 이루어진 테이블을 만들고 CASE WHEN절을 이용하여 해당하면 1로, 해당 안하면 그대로 0으로 놔두면 되는 것임..
대신 테이블을 중첩해서 계속 만들어야 하기 때문에 어려움
그니까 중요한 것
1. ORDER BY, GROUP BY 절에는 AS 별칭 을 사용할 수 없다
2. CASE WHEN 절 안에 SELECT 절을 사용할 수 없다 (하지만 반대는 가능 ) -> 따라서 SELECT 절의 FROM부분으로 CASE WHEN절을 사용하자
+) 예섬님이 푼 거에 따르면 WHERE 절로도 풀 수 있더라
-- where 절을 이용해서 풀어보자!
SELECT CAR_TYPE, COUNT(CAR_TYPE) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
'SQL' 카테고리의 다른 글
프로그래머스 SQL 문제(3) - 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.08.02 |
---|---|
프로그래머스 SQL 문제(2) - 성분으로 구분한 아이스크림 총 주문량 (0) | 2023.08.02 |
오라클 데이터베이스 SQL(7) - 부조회(서브쿼리) (0) | 2023.07.29 |
오라클 데이터베이스 SQL(6) - SELECT문 구절 / ORDER BY / GROUP BY / HAVING / 순위함수 (0) | 2023.07.29 |
오라클 데이터베이스(5) - 문자열 내장함수 / 숫자 내장 함수 / 날짜함수 / 형식변환함수 / NULL 관련 함수 (0) | 2023.07.29 |