본문 바로가기
프로그래머스

24/07/16 SQL 문제

by Jini_Lamp 2024. 7. 16.

1. 3월에 태어난 여성 회원 목록 출력하기(https://school.programmers.co.kr/learn/courses/30/lessons/131120)

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE TLNO is not NULL AND GENDER = 'W' AND MONTH(DATE_OF_BIRTH) = 03
ORDER BY MEMBER_ID

 

 

 

2. 대여 기록이 존재하는 자동차 리스트 구하기(https://school.programmers.co.kr/learn/courses/30/lessons/157341)

SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H on C.CAR_ID = H.CAR_ID
WHERE car_type = '세단' AND MONTH(START_DATE) = 10
ORDER BY C.CAR_ID DESC

 

 

 

3. 모든 레코드 조회하기(https://school.programmers.co.kr/learn/courses/30/lessons/59034)

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

 

 

4. 즐겨찾기가 가장 많은 식당 정보 출력하기(https://school.programmers.co.kr/learn/courses/30/lessons/131123#qna)

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

 

WHERE 절에서 사용된 in() 은 지정된 값 목록 중 하나와 일치하는 모든 행을 검색하는데 사용된다.

아래는 in() 을 사용하기 전에 작성했던 코드인데, 얼핏 결과만 보면 이것도 맞지 않나 생각이 들 수 있다. 하지만 이렇게 될 경우 REST_NAME이 일치하지 않는다. 왜냐하면 GROUP BY로 묶으면 가장 상단에 있는 데이터들을 임의로 가져오기 때문이다.

// 오답
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC

 

관련 설명은 다음 링크를 통해 확인 바람(https://school.programmers.co.kr/questions/38854)

'프로그래머스' 카테고리의 다른 글

24/07/30 알고리즘 문제  (0) 2024.07.30
24/07/29 알고리즘 문제  (0) 2024.07.29
24/07/15 알고리즘 문제  (0) 2024.07.15
24/07/11 SQL 문제  (0) 2024.07.11
24/07/09 SQL 문제  (0) 2024.07.09