본문 바로가기
[프로그래머스] 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.
[프로그래머스] GROUP BY 〉Lv2. 입양 시각 구하기(1) 문제 설명 예시 풀이 방법 9:00부터 19:59까지 DATETIME의 시간대별로 입양 건 수를 조회하며 결과는 시간대 순서로 정렬하는 문제입니다. 문제 풀이를 하기 전 DATETIME의 년, 월, 일, 시, 분, 초만을 추출하는 방법 잠깐 배우겠습니다. DATETIME 특정 데이터 추출하기 날짜 단위 함수(컬럼명) : 날짜 단위 데이터 추출 YEAR(DATETIME) : 연도 추출 MONTH(DATETIME) : 월 추출 DAY(DATETIME) / DAYOFMONTH(DATETIME) : 일 추출 HOUR(DATETIME) : 시간 추출 MINUTE(DATETIME) : 분 추출 SECOND(DATETIME) : 초 추출 문제 풀이 SELECT HOUR(DATETIME) AS HOUR, COUNT(D.. 2021. 10. 16.
[프로그래머스] GROUP BY 〉Lv2. 고양이와 개는 몇 마리 있을까 문제 설명 예시 풀이 방법 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 문제입니다. 우선 문제를 풀기 전 동물 보호소에 들어온 동물의 종류가 어떻게 구성되어 있는지 쿼리를 만들어 실행해 보았습니다. SELECT ANIMAL_TYPE FROM ANIMAL_INS GROUP BY ANIMAL_TYPE 그 결과 동물은 단 두 종류로 고양이와 개뿐이었습니다...ㅎㅎ 그렇다면 WHERE 조건절에서 ANIMAL_TYPE이 고양이이거나 개인 경우를 선별할 필요가 없습니다. 그럼 위 쿼리에 이어서 문제를 풀이하면 SELECT 절에 COUNT 함수를 추가하여 ANIMAL_TYPE을 집계하면 됩니다. 또한 결과는 같아서 굳이 할 필요가 없다 생각했지만 오답으로 나와서 어쩔 수 없이 해야 하는 순.. 2021. 10. 15.
[프로그래머스] GROUP BY 〉Lv2. 동명 동물 수 찾기 문제 설명 예시 풀이 방법 동물 보호소에 들어온 동물(ANIMAL_INS) 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 문제입니다. 이 문제의 핵심은 중복된 이름을 추출하는 것으로 HAVING절 대해 배운 후 문제 풀이를 하겠습니다. 그리고 이름이 없는(NULL) 동물은 집계에서 제외하라는 조건(WHERE)이 주어졌고, 결과는 이름 순으로 정렬(ORDER BY)되도록 쿼리를 작성해야 합니다. HAVING 구문 HAVING 절은 WHERE절과 동일하게 조건절에 해당합니다. 차이점은 아래의 SQL 기본 구조를 보면 알 수 있듯 WHERE 절은 언제나 FROM 뒤에 위치하고, HAVING 절은 GROUP BY 뒤에 위치합니다. WHERE은 모든 필드에 조건을 둘 수 있는 반면, HAVI.. 2021. 10. 14.