Programmers SQL 문제 풀기

나나·2025년 5월 9일
0

GROUP BY: 고양이와 개는 몇 마리 있을까

⭐⭐

문제

  • 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요.
  • 이때 고양이를 개보다 먼저 조회해주세요.

코드

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS 
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;

설명

고양이와 개가 각각 몇 마리인지 세는 것이므로 GROUP BY 동물 종류로 해주어 COUNT해주었습니다.

GROUP BY: 동명 동물 수 찾기

⭐⭐

문제

  • 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과
  • 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요.
  • 이때 결과는 이름이 없는 동물은 집계에서 제외하며,
  • 결과는 이름 순으로 조회해주세요.

코드

-- 코드를 입력하세요
SELECT NAME, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(*)>=2
ORDER BY NAME;

설명

WHERE절에서 이름이 없는 동물은 제외해줍니다.
또한, 두 번 이상 쓰인 이름을 집계하기 위해 이름을 기준으로 GROUP BY해주고 COUNT하여 수를 세어줍니다.

GROUP BY: 년, 월, 성별 별 상품 구매 회원 수 구하기

⭐⭐⭐⭐

문제

USER_INFO 테이블과 ONLINE_SALE 테이블에서

  • 년, 월, 성별 별로
  • 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요.
  • 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요.
  • 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

코드

-- 코드를 입력하세요
SELECT YEAR(S.SALES_DATE) AS 'YEAR', MONTH(S.SALES_DATE) AS 'MONTH', 
    U.GENDER, COUNT(DISTINCT U.USER_ID) AS 'USERS'
FROM USER_INFO U JOIN ONLINE_SALE S ON U.USER_ID = S.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), U.GENDER
ORDER BY YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), U.GENDER

설명

먼저 두 테이블을 USER_ID를 기준으로 조인합니다.
그 후 GROUP BY절에서 년, 월, 성별로 그룹화해줍니다.
상품을 구매한 회원 수를 집계해야하므로 COUNT함수를 사용해야하는데, 동일한 회원이 여러 번 세어지는 것을 DISTINCT를 사용하여 방지합니다.

SELECT: 잔챙이 잡은 수 구하기

문제

  • 잡은 물고기 중 길이가 10cm 이하인 물고기의 수를 출력하는 SQL 문을 작성해주세요.
  • 물고기의 수를 나타내는 컬럼 명은 FISH_COUNT로 해주세요.

코드

-- 코드를 작성해주세요
SELECT COUNT(*) AS 'FISH_COUNT'
FROM FISH_INFO 
WHERE LENGTH IS NULL;

설명

10cm이하인 경우는 LENGTH가 NULL이므로, IS NULL을 사용하여 필터링합니다.

STRING, DATE: 취소되지 않은 진료 예약 조회하기

⭐⭐⭐⭐

문제

PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서

  • 2022년 4월 13일
  • 취소되지 않은
  • 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요.
  • 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요.
  • 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

코드

-- 코드를 입력하세요PT_NO
SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, A.MCDP_CD, D.DR_NAME, A.APNT_YMD
FROM APPOINTMENT A JOIN PATIENT P ON A.PT_NO = P.PT_NO JOIN DOCTOR D ON A.MDDR_ID = D.DR_ID
WHERE DATE(A.APNT_YMD) = '2022-04-13' AND A.APNT_CNCL_YN = 'N' AND A.MCDP_CD = 'CS'
ORDER BY A.APNT_YMD;

설명

WHERE절에서 2022년 4월 13일, 취소되지 않은, CS 예약 내역을 필터링합니다.
이때 시간까지 포함된 예약일시이므로 DATE함수를 사용하여 '2022-04-13'과 비교합니다.

profile
데이터에서 의사결정으로

0개의 댓글