SQL 고득점 Kit - 8.21

김동현·2024년 8월 21일

SQL 고득점 Kit

목록 보기
35/56

오늘은 3문제를 풀었는데 이제 레벨 2정도는 쉽게 풀 수 있어 속도를 올려서 빠르게 끝내려고 한다. 이제 빠르게 SQL 문제를 모두 풀고 알고리즘을 풀거나 준비를 하는 것에 더 집중하고 싶다

String, Date - 카테고리 별 상품 개수 구하기

문제

PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/131529

풀이

SELECT 
    LEFT(PRODUCT_CODE, 2) CATEGORY, -- 왼쪽에서 설정한 자리 수만큼의 값을 반환
    COUNT(LEFT(PRODUCT_CODE, 2)) PRODUCTS 
FROM 
    PRODUCT
GROUP BY 
    LEFT(PRODUCT_CODE, 2)
ORDER BY 
    CATEGORY

리뷰

  • LEFT(컬럼, 자리수) : 왼쪽부터 자리수 만큼의 값을 반환한다. 해당 함수를 통해 그룹화하여 출력을 진행했다.

String, Date - DATETIME에서 DATE로 형 변환

문제

ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

https://school.programmers.co.kr/learn/courses/30/lessons/59414

풀이

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

리뷰

  • DATE_FORMAT은 이제 쉽게 사용할 수 있다. (많이 사용한 것은 이제 익숙해져서 바로 적용 및 사용할 수 있다. - 대신 기억 안 나거나 자주 사용하지 않는 것은 조금씩 찾아보고 사용 중)

GROUP BY - 진료과별 총 예약 횟수 출력하기

문제

APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/132202

풀이

# 2022년 5월에 `예약`한 환자 수 
# 진료과코드 별로 조회
SELECT 
    MCDP_CD '진료과코드',
    COUNT(MCDP_CD) '5월예약건수'
FROM 
    APPOINTMENT
WHERE 
    APNT_YMD LIKE '2022-05%'
GROUP BY 
    MCDP_CD 
ORDER BY 
    COUNT(MCDP_CD), MCDP_CD

리뷰

  • 해당 문제는 예약한 환자의 수를 추출하기 때문에 처음에 예약 취소한 인원은 빼고 진행했고, 예약 취소 여부가 NULL인 값도 존재하여 빼고 쿼리를 완성했는데 틀렸다.
  • 그래서 예약한 환자(예약 취소, NULL 고려 X) 모두 카운트한 결과는 정답으로 나왔다. 그렇다면 내가 문제를 잘못 해석한 것일까?, 문제 자체가 정확한 조건을 알려주지 않는 것인가?

GitHub

카테고리 별 상품 개수 구하기
https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/131529.%E2%80%85%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC%E2%80%85%EB%B3%84%E2%80%85%EC%83%81%ED%92%88%E2%80%85%EA%B0%9C%EC%88%98%E2%80%85%EA%B5%AC%ED%95%98%EA%B8%B0

DATETIME에서 DATE로 형 변환
https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/59414.%E2%80%85DATETIME%EC%97%90%EC%84%9C%E2%80%85DATE%EB%A1%9C%E2%80%85%ED%98%95%E2%80%85%EB%B3%80%ED%99%98

진료과별 총 예약 횟수 출력하기
https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/132202.%E2%80%85%EC%A7%84%EB%A3%8C%EA%B3%BC%EB%B3%84%E2%80%85%EC%B4%9D%E2%80%85%EC%98%88%EC%95%BD%E2%80%85%ED%9A%9F%EC%88%98%E2%80%85%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0

profile
'The best way to get started is to quit talking and begin doing.'

0개의 댓글