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

Lake·2024년 4월 29일
0

SQL 문제

목록 보기
11/36
post-thumbnail

보호소에서 중성화한 동물 (JOIN)

  • 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
    중성화 : 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시되어있습니다.

제출한 코드 :

SELECT I.ANIMAL_ID
       , I.ANIMAL_TYPE
       , I.NAME
FROM ANIMAL_INS AS I
LEFT JOIN ANIMAL_OUTS AS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE LIKE "%Intact%"
     AND SEX_UPON_OUTCOME NOT LIKE '%Intact%'
ORDER BY ANIMAL_ID;

다른 방법들(WHERE절 이외의 부분은 모두 동일) :

WHERE I.SEX_UPON_INTAKE LIKE "%Intact%"
      AND ((O.SEX_UPON_OUTCOME LIKE "%Spayed%") OR 
          (O.SEX_UPON_OUTCOME LIKE "%Neutered%"))
정규표현식 활용
WHERE I.SEX_UPON_INTAKE NOT REGEXP 'Spayed|Neutered'
AND O.SEX_UPON_OUTCOME REGEXP 'Spayed|Neutered'
제시된 조건 그대로 풀어서 쓰기
WHERE I.SEX_UPON_INTAKE <> O.SEX_UPON_OUTCOME

보호소에 들어올 당시의 상태가 SpayedNeutered인 경우
보호소를 나갈 당시에도 상태가 변하지 않기 때문에 <> 사용 가능


조건에 맞는 도서와 저자 리스트 출력하기 (JOIN)

  • '경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT BOOK_ID
       , AUTHOR_NAME
       , DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d')
FROM AUTHOR AS A
LEFT JOIN BOOK AS B
ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE CATEGORY = "경제"
ORDER BY B.PUBLISHED_DATE

조건별로 분류하여 주문상태 출력하기 (STRING, DATE)

  • FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT ORDER_ID
       , PRODUCT_ID
       , DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS "OUT_DATE"
       , CASE WHEN OUT_DATE <= '2022-05-01' then '출고완료'
              WHEN OUT_DATE IS NULL THEN '출고미정'
              ELSE '출고대기'
         END AS '출고여부'
FROM FOOD_ORDER
ORDER BY ORDER_ID;

성분으로 구분한 아이스크림 총 주문량 (GROUP BY)

  • 상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

제출한 코드 :

SELECT I.INGREDIENT_TYPE
       , SUM(H.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS H
LEFT JOIN ICECREAM_INFO AS I
ON H.FLAVOR = I.FLAVOR
GROUP BY I.INGREDIENT_TYPE
ORDER BY H.TOTAL_ORDER

루시와 엘라 찾기 (STRING, DATE)

  • 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

제출한 코드 :

SELECT ANIMAL_ID
       , NAME
       , SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP '^(Lucy|Ella|Pickle|Rogan|Sabrina|Mitty)$';

정규표현식에서의 ^랑 $의 사용법을 처음 알았다. ^랑 $를 쓰지 않고 답안을 제출했더니 틀렸다고 나왔다. 뭐가 문제인가 싶어서 지피티 선생님한테 물어보니까 바로 답 해줬다. (^와 %의 사용은 필수가 아니다)


그러니까, 만약 이름이 Ella가 아니라 Ellaz라는 친구가 있다면 Ellaz가 Ella라는 부분 문자열을 포함하기 때문에 패턴이 일치하게 된다(-> 결과에 출력된다) 만약 찾고자 하는 값이 다른 문자열과 함께 조합되어 있거나 문자열의 일부로 포함되어 있다면, ^와 $를 사용하지 않을 경우 원하지 않는 결과가 나올 수 있다는 것이다.

오늘의 TMI

키보드 샀다.
그동안은 매번 노트북 키보드나 그냥 일반적으로 학교 컴퓨터실이나 사무실에서 쓰는 키보드만 썼고, 몇 년 전 아이패드를 구매하고 나서는 블루투스 키보드가 하나는 필요해서 다들 쓰는 로지텍k380 사서 지금까지 쓰고 있다. (사실상 아이패드랑 같이 쓰려고 산거지만 이제는 그냥 노트북 키보드 안 쓰고 로지텍 연결해서 씀.....ㅋㅋㅋㅋ)

평소에도 물건이 완전히 망가지기 전까지 새거 안 사고 대충 쓰는 사람인지라 키보드도 고장날 때까지 쓰려고 했지만...? 요즘 내 유튭 알고리즘에 기계식 키보드가 많이 뜨더라^^ 그래도 '한번쯤은 써보고 싶다' 였지 '와 사야겠다!' 이건 아니어서 그냥 있었는데 다얼유 A104PRO FLEX 보고 이건 괜찮겠는데? 싶어서 샀다ㅋㅋㅋ 기게식 키보드에 대한 호기심 + 안그래도 로지텍 점점 씹힘현상 심해지는 중/높이 불편함 + 마음에 드는거 바로 발견했으니까 콤보로...^^(핑계임)

그래도 첫 기계식 키보드인데 10만원은 좀 그런가 싶어서 독거미 저소음 피치축인가 그거 사려다가 다얼유 A104PRO FLEX가 디자인/색상도 그렇고 소리도 더 마음에 들어서 큰맘 먹고 지름... 독거미 저소음은 나중에 회사 다닐 때 필요하게 되면 그때 사는걸로ㅋㅋㅋ

0개의 댓글