티스토리 뷰

카테고리 없음

[프로그래머스] JOIN

Jason of the Argos 2020. 11. 12. 00:42

programmers.co.kr/learn/courses/30/parts/17046

 

프로그래머스

온라인 시험 감독 서비스 모니토. 부정행위 걱정 없이 온라인 시험을 운영, 감독하세요. 응시자의 실물과 컴퓨터 화면을 동시에 감독하며 공정하고 투명한 온라인 시험을 운영할 수 있습니다.

programmers.co.kr

1. 없어진 기록찾기

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS AS A RIGHT JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID

NOTE)

집합 개념으로 JOIN 생각해서 풀기.

참고 자료:

 

2. 있었는데요 없었습니다

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME ASC

 

3. 오랜 기간 보호한 동물(1)

SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME ASC
LIMIT 3

 

4. 보호소에서 중성화한 동물

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE != B.SEX_UPON_OUTCOME
ORDER BY A.ANIMAL_ID

NOTE)

이건 좀 야매의 느낌의 풀이다. 왜냐면 보호소의 동물의 성별이라는 attribute 성질을 특수한 상황으로 이용해서 문제를 풀었기 때문이다.

만약 처음 보호소에 들어왔을 때 이미 중성화가 되었다면 나중에 나갈 때도 성별이 바뀌지 않는다.

하지만 들어갔을 때와 나갔을 때 성별이 다른 경우는 오직 한가지, 들어갔을때는 Intact Male/Female 이지만 나갈때 Spayed Male/Female인 경우인 것이다.

 

조금 더 정확한 풀이는 성별 attribute에 어떤 단어를 포함하는지 확인하는 것이 문제의 취지에 조금 더 가깝다고 생각한다.

그렇다면 WHERE IN 이나 LIKE를 써서 푼 답은 다음과 같다.

 

WHERE IN으로 푼 답:

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE SEX_UPON_INTAKE IN ('Intact Male', 'Intact Female') AND SEX_UPON_OUTCOME IN ('Spayed Male', 'Neutered Male', 'Spayed Female', 'Neutered Female')
ORDER BY ANIMAL_ID

LIKE로 푼 답:

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE LIKE 'Intact%'
  AND (B.SEX_UPON_OUTCOME LIKE 'Neutered%' OR B.SEX_UPON_OUTCOME LIKE 'Spayed%')
ORDER BY ANIMAL_ID