본문 바로가기
[프로그래머스] JOIN 〉Lv4. 보호소에서 중성화한 동물 문제 설명 예시 풀이 방법 보호소에서 중성화 수술을 거친 동물 정보를 알아보기 위한 쿼리를 짭니다. 보호소에 들어올 당시에는 중성화되지 않았지만(성별 및 중성화 여부에 Intact인 동물), 보호소를 나갈 당시에는 중성화된(성별 및 중성화 여부에 Spayed 또는 Neutered로 표시되어 있는 동물) 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 문제입니다. FROM절에서 보호소에 들어온 동물의 정보가 담긴 테이블 ANIMAL_INS와 입양간 동물의 정보가 담긴 테이블 ANIMAL_OUTS를 동물의 아이디로 매치하여 JOIN합니다. WHER절에서 중성화 여부에 대한 조건을 명시하는데, 글자를 포함하는지 알아보기 위해서는 LIKE 연산자 와 와일드카드('%,_')를 사용하여 해당 문자.. 2021. 10. 24.
[프로그래머스] JOIN 〉Lv3. 오랜 기간 보호한 동물(1) 문제 설명 예시 풀이 방법 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 문제입니다. 결과는 보호 시작일 순으로 조회해야 합니다. 우선 주어진 두 테이블을 활용하여 동물의 ID가 같은 것끼리 매치하여 JOIN을 합니다. WHERE조건으로 아직 입양을 못 간 동물을 추출하도록 하여 입양 테이블(ANIMAL_OUTS)의 동물 아이디가 NULL인 조건을 명시합니다. 가장 오래 보호소에 있었던 동물 3마리를 추출하기 위해 보호소에 들어온 동물 정보를 담은 테이블 ANIMAL_INS의 보호 시작일(DATETIME) 순으로 ORDER BY하여 정렬합니다. 다음으로 행단위로 상위 n개 행을 추출하는 LIMIT n;을 사용하여 보호 시작일이 가장 빠른 상위 3개 .. 2021. 10. 23.
[프로그래머스] JOIN 〉Lv3. 있었는데요 없었습니다 문제 설명 예시 풀이 방법 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었다고 합니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하여 결과는 보호 시작일이 빠른 순으로 정렬하는 문제입니다. 이 문제도 이 전 문제와 마찬가지로 ANIMAL_INS와 ANIMAL_OUTS의 동물의 아이디가 같은 것 끼리 매치하여 JOIN 합니다. 그리고 WHERE절에서 INS의 보호 시작일(DATETIME)이 OUTS의 입양일(DATETIME)보다 더 클 때를 조건으로 하여 보호 시작일보다 입양일이 더 빠른 동물들을 추출합니다. 다음으로 보호 시작일인 INS의 DATETIME이 빠른 순으로 정렬되도록 ORDER BY에 입력해 줍니다. 이때 SELECT절에는 INS 테이블의 동물 아이디와 이름이거나 OU.. 2021. 10. 22.
[프로그래머스] JOIN 〉Lv3. 없어진 기록 찾기 문제 설명 예시 풀이 방법 입양 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 문제입니다. 이를 위해 동물보호소에 들어온 동물의 정보를 담은 테이블 ANIMAL_INS와 입양 보낸 동물의 정보를 담은 테이블 ANIMAL_OUTS를 ANIMAL_ID가 일치하는 것끼리 매치하여 JOIN합니다. 그리고 입양 간 기록은 있으나 들어온 기록이 없다는 것은 ANIMAL_OUTS에는 동물의 ID가 있으나, ANIMAL_INS에는 없다는 것을 말하므로 WHERE절에 ANIMAL_INS의 ANIMAL_ID 가 NULL인 것을 추출합니다. 다음으로 ID순으로 ORDER BY하여 정렬합니다. 이 때, SELECT절에서 나타나야 하는 동물의 ID와 이름 컬럼은 입양을 간 기록이 있.. 2021. 10. 21.
[프로그래머스] IS NULL 〉Lv2. NULL 처리하기 문제 설명 예시 풀이 방법 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 문제입니다. 단, NULL로 되어 있는 이름이 없는 동물의 이름은 "No name"으로 표시해야 합니다. 이를 위해 공백치환 함수를 사용하는데 각 DB종류에 따라 다르게 사용합니다. Oracle : NVL(컬럼명, "Value") My SQL : IFNULL(컬럼명, "Value") MS SQL : ISNULL(컬럼명, "Value") 이처럼 공백치환 함수를 사용하여 해당 컬럼이 NULL이면 Value값으로 치환할 수 있습니다. 즉, 문제에서 이름이 없는 동물의 이름을 "No name"으로 표시 하라고 하였으므로 DB종류에 맞는 쿼리에 맞게 위 함수를 사용하여 (NAME, "No name")을 추가 합니다... 2021. 10. 20.
[프로그래머스] IS NULL 〉Lv1. 이름이 있는 동물의 아이디 문제 설명 예시 풀이 방법 동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 문제로 ID는 오름차순 정렬을 해야 합니다. 이때 WHERE 조건절에서 IS NOT NULL을 사용하여 NAME 열에 NULL이 아닌 동물 즉, 이름이 있는 동물들을 조회할 수 있습니다. 또한 ORDER BY를 사용하여 ANIMAL_ID를 오름차순으로 정렬합니다. 문제 풀이 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID 실행 결과 2021. 10. 19.
[프로그래머스] IS NULL 〉Lv1. 이름이 없는 동물의 아이디 문제 설명 예시 풀이 방법 동물 보호소에 들어온 동물 중, 이름이 없는 채 들어온 동물의 ID를 조회하는 문제로 ID는 오름차순 정렬을 해야 합니다. 이때 WHERE 조건절에서 IS NULL을 사용하여 NAME 열에 이름이 없는 동물들을 조회할 수 있습니다. 또한 ORDER BY를 사용하여 ANIMAL_ID를 오름차순으로 정렬합니다. 문제 풀이 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID 실행 결과 2021. 10. 18.
[프로그래머스] GROUP BY 〉Lv4. 입양 시각 구하기(2) 문제 설명 풀이 방법 아래의 쿼리는 ANIMAL_OUTS의 입양일의 시간을 추출하여, 시간대별로 순차 정렬을 하는 쿼리로 결과가 오른쪽 이미지와 같이 7시부터 19시까지만 존재하는 것으로 나왔습니다. SELECT HOUR(DATETIME) HOUR FROM ANIMAL_OUTS GROUP BY HOUR ORDER BY HOUR 그러나 우리의 문제는 0시부터 23시까지를 구하는 것이며 각 시간대별로 입양 건 수를 집계하여 결과를 시간대 순으로 정렬하는 문제입니다. 이는 로컬 변수를 활용하여 7~19시만 존재하는 HOUR(DATETIME) 이 외 시간을 새로운 행에 생성함으로 0~23시의 시간을 컬럼을 만들 수 있습니다. 그리고 스칼라 서브 쿼리를 활용하여 HOUR(DATETIME)과 새로 만든 행의 동일한.. 2021. 10. 17.