What a Beautiful Data!

프로그래머스 sql 문제 풀이로 기본 다지기

by darami

회사 데이터 못 만져서 집에서 새로 나온 프로그래머스 문제로 몸 풀기

 

가격이 제일 비싼 식품의 정보 출력하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[정답코드]

SELECT * 
FROM FOOD_PRODUCT
WHERE PRICE =  ( SELECT MAX(PRICE) AS mprice
                 FROM FOOD_PRODUCT
                )

- 왜 서브쿼리를 써야할까요? 

이 코드는 왜 안되나요? 

SELECT * 
FROM FOOD_PRODUCT
WHERE PRICE = MAX(PRICE)

SQL 실행 중 오류가 발생하였습니다.
Invalid use of group function

이런 에러 메세지가 뜰 겁니다. 어떤 그룹에 최대값인지를 명시해 주지 않았죠?

몇 반의 최대값이라는거야! 이렇게 되는 겁니다. 

 

즐겨찾기가 가장 많은 식당 정보 출력하기

[ 정답 코드 ] 

SELECT FOOD_TYPE
      ,REST_ID
      ,REST_NAME
      ,FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE,FAVORITES) IN 
      (SELECT FOOD_TYPE,MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC;

 

- 왜 그렇게 해야하나요? 이건 왜 안되나요??

코드 A

SELECT FOOD_TYPE
      ,REST_ID
      ,REST_NAME
      ,MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;

 

코드 A 결과
정답 코드 결과

차이는 일식에서 난다!  식당명 (REST_NAME)이 다르다.

코드 A로 하면 각 MAX인 즐겨찾기 값은 뽑아주지만 그에 맞는 식당을 뽑아주는 게 아니라 순서대로 매칭한다. 

결국 MAX인 값은 그룹화 해주어야하는것, 어디에서 맥스인지 명시!

 

3월에 태어난 여성 회원 목록 출력하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT MEMBER_ID
      ,MEMBER_NAME
      ,GENDER
      ,DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH)= '03' AND TLNO IS NOT NULL AND GENDER = 'W'
ORDER BY MEMBER_ID

 

조건별로 분류하여 주문상태 출력하기

 

SELECT ORDER_ID
      ,PRODUCT_ID
      ,OUT_DATE
      ,(CASE WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
            WHEN OUT_DATE > '2022-05-01' THEN '출고대기'
            ELSE '출고미정'END)AS 출고여부
FROM FOOD_ORDER
ORDER BY ORDER_ID ASC

 

식품분류별 가장 비싼 식품의 정보 조회하기

 

SELECT CATEGORY
      ,PRICE AS MAX_PRICE
      ,PRODUCT_NAME
FROM FOOD_PRODUCT 
WHERE (CATEGORY,PRICE) IN (SELECT CATEGORY, MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY) 
AND CATEGORY IN ('과자','국','김치','식용유')
ORDER BY PRICE DESC

- 흔하게 하는 실수 WHERE AND WHERE 아니잖아~~

블로그의 정보

다람

darami

활동하기