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 |