본문 바로가기
SQL

프로그래머스 SQL 문제(1) 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

by 김랑해 2023. 7. 31.

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;