[MySQL] 프로그래머스 문제 연습 6

Lake·2024년 4월 25일
0

SQL 문제

목록 보기
9/36
post-thumbnail

입양 시간 구하기 (GROUP BY)

  • 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

제출한 코드 :

SELECT HOUR(DATETIME) AS "HOUR"
       , COUNT(ANIMAL_ID) AS "COUNT"
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR;

HOUR() 함수 대신에 SUBSTR이나 DATE_FORMAT()을 쓰는 방법도 있다.


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

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

제출한 코드 :

SELECT MCDP_CD AS "진료과 코드"
       , COUNT(APNT_YMD) AS "5월 예약건수"
FROM APPOINTMENT
WHERE APNT_YMD LIKE "2022-05%"
GROUP BY MCDP_CD
ORDER BY COUNT(APNT_YMD), MCDP_CD;

처음에는 WHERE 절에 AND (APNT_CNCL_YN = "N") 한줄 더 추가해서 제출했었는데 틀림; 빼니까 정답 처리됐다.


12세 이하인 여자 환자 목록 출력하기 (SELECT)

  • PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT PT_NAME
       , PT_NO
       , GEND_CD
       , AGE
       , CASE WHEN TLNO IS NULL THEN 'NONE'
              ELSE TLNO
         END AS "TLNO"
FROM PATIENT
WHERE AGE <= 12
    AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;

이제 이런 문제는 무난무난하게 푸는 것 같다. 근데 왜 GROUP BY랑 서브쿼리만 들어가면 문제인 걸까...


인기있는 아이스크림 (SELECT)

  • 상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.

제출한 코드 :

SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC;

자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (GROUP BY)

  • CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT CAR_TYPE
       , COUNT(*) AS "CARS"
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE "%통풍시트%"
    OR OPTIONS LIKE "%열선시트%"
    OR OPTIONS LIKE "%가죽시트%"
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;

처음에는 위처럼 제출 했으나, '하나 이상의 옵션이 포함된'을 OR로 처리한 것이 맞는건지 확신이 안 서서 지피티 선생님한테 물어봤더니 맞는 접근 방법이라 하면서 정규표현식(!!!)을 알려줬다. 정말 오랜만에 정규 표현식이라는 단어를 들었다. 왜 생각 못했지????

regexp

  • REGEXP는 일반적으로 WHERE 절에서 조건을 지정할 때 사용된다고 한다.
    사용 방법은 위에 쓰인 것처럼
SELECT 컬럼명
FROM 테이블 명
WHERE 컬럼명 REGEXP '패턴';

이렇게 쓴다.

  • REGEXP는 MySQL에서, REGEXP_LIKE는 ORACLE에서 쓴다.

오늘의 TMI

아무래도 공유기에 문제가 있는 듯하다. 내 핸드폰, 새로산 노트북 부터 가족들 전자기기까지 죄다 와이파이 연결이 잘 안 됐다. 많으면 5분에 한번, 적으면 20분에 한번은 계속 와이파이가 끊겼다. 와이파이가 안 끊겨도 신호 가 계속 불안정해서 로딩 시간 오래 걸리고, 버퍼링 걸리고.... 공부하는데 집중을 잘 못 했다. 이제 와이파이 옆에 느낌표 표시만 봐도 환멸난다.;

0개의 댓글